如何比较两个通用集合?这是我尝试使用两个字符串数组,但它不会返回true。
namespace genericCollections
{
class Program
{
static void Main(string[] args)
{
string[] xx = new string[] { "gfdg", "gfgfd", "fgfgfd" };
string[] yy = new string[] { "gfdg", "gfgfd", "fgfgfd" };
Console.WriteLine(ComparerCollection(xx, yy).ToString());
Console.ReadKey();
}
static bool ComparerCollection<T>(ICollection<T> x, ICollection<T> y)
{
return x.Equals(y);
}
}
}
答案 0 :(得分:8)
bool arraysAreEqual = xx.SequenceEqual(yy);
答案 1 :(得分:2)
来自MSDN文档:
Equals的默认实现 仅支持引用相等,但是 派生类可以覆盖它 支持价值平等的方法。
在你的情况下,xx和yy是string []的两个不同实例,所以它们永远不会相等。 您必须覆盖字符串[]
的.Equal()方法但你可以通过循环整个集合来解决它
static bool CompareCollection<T>(ICollection<T> x, ICollection<T> y)
{
if (x.Length != y.Length)
return false;
for(int i = 0; i < x.Length,i++)
{
if (x[i] != y[i])
return false;
}
return true;
}
答案 2 :(得分:1)
使用LINQ:
可以获取xx但不在xy中的元素 var newInXY = xx.Except(xy);