如何比较两个通用集合?
问题描述:
如何比较两个通用集合?这是我用两个字符串数组的尝试,但它不返回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);
}
}
}
答
你可以得到是XX,但在XY使用LINQ元素:
var newInXY = xx.Except(xy);
答
从MSDN documenation:
等于的默认实现仅支持引用等式,但 派生类可以覆盖此方法以支持值相等。
在你的情况下,xx和yy是string []的两个不同的实例,所以它们永远不会相等。 你不得不重写的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;
}
循环解决这个问题