diff --git a/Value.Net45/Value.Net45.csproj b/Value.Net45/Value.Net45.csproj
index 8327ac3..230b008 100644
--- a/Value.Net45/Value.Net45.csproj
+++ b/Value.Net45/Value.Net45.csproj
@@ -10,7 +10,7 @@
Value
Value
v4.5
- 512
+ 512
false
@@ -58,4 +58,4 @@
-->
-
\ No newline at end of file
+
diff --git a/Value.Tests/EqualByValuesTest.cs b/Value.Tests/EqualByValuesTest.cs
new file mode 100644
index 0000000..58a8992
--- /dev/null
+++ b/Value.Tests/EqualByValuesTest.cs
@@ -0,0 +1,30 @@
+using NUnit.Framework;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Value.Shared;
+
+namespace Value.Tests
+{
+ [TestFixture]
+ public class EqualByValuesTest
+ {
+ [Test]
+ public void Should_be_equal_by_values()
+ {
+ var coll1 = new string[] { "Hello", "Apple", "C#" };
+ var coll2 = new string[] { "C#", "Hello", "Apple" };
+ Assert.IsTrue(new EqualByValues(coll1, coll2));
+ }
+
+ [Test]
+ public void Should_not_be_equal_by_values()
+ {
+ var coll1 = new string[] { "Hello", "Apple", "C#", "Java" };
+ var coll2 = new string[] { "C#", "Hello", "Apple" };
+ Assert.IsTrue(new EqualByValues(coll1, coll2));
+ }
+ }
+}
diff --git a/Value.Tests/Value.Tests.csproj b/Value.Tests/Value.Tests.csproj
index e61d9f5..689cf08 100644
--- a/Value.Tests/Value.Tests.csproj
+++ b/Value.Tests/Value.Tests.csproj
@@ -47,6 +47,7 @@
+
@@ -66,10 +67,10 @@
-
+
-
+
-
\ No newline at end of file
+
diff --git a/Value.Tests/packages.config b/Value.Tests/packages.config
index 9a62a57..3efdbfa 100644
--- a/Value.Tests/packages.config
+++ b/Value.Tests/packages.config
@@ -3,4 +3,4 @@
-
\ No newline at end of file
+
diff --git a/Value/EqualByValues.cs b/Value/EqualByValues.cs
new file mode 100644
index 0000000..296a63f
--- /dev/null
+++ b/Value/EqualByValues.cs
@@ -0,0 +1,41 @@
+
+namespace Value.Shared
+{
+ using System.Collections.Generic;
+
+ ///
+ /// Determines two collections are equal by values, i.e. ignoring the order of an elements,
+ /// but the exact elements contained.
+ ///
+ public class EqualByValues
+ {
+ private IEnumerable _first;
+ private IEnumerable _second;
+
+ public EqualByValues(IEnumerable first, IEnumerable second)
+ {
+ _first = first;
+ _second = second;
+ }
+
+ public bool Value()
+ {
+ bool ret = true;
+ HashSet set = new HashSet(_first);
+ foreach (var item in _second)
+ {
+ if (!set.Contains(item))
+ {
+ ret = false;
+ break;
+ }
+ }
+ return ret;
+ }
+
+ public static implicit operator bool(EqualByValues equalByValues)
+ {
+ return equalByValues.Value();
+ }
+ }
+}
diff --git a/Value/Value.Shared.projitems b/Value/Value.Shared.projitems
index 156c711..f9e2b60 100644
--- a/Value/Value.Shared.projitems
+++ b/Value/Value.Shared.projitems
@@ -13,6 +13,7 @@
+