如何比较两个通用集合?

3
我该如何比较两个通用集合?这是我使用两个字符串数组的尝试,但它并不返回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);
        }
    }
}
3个回答

8

2

根据MSDN文档:

Equals的默认实现仅支持引用相等性,但派生类可以覆盖此方法以支持值相等性。

在您的情况下,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;
}

1

你可以使用 LINQ 获取在 xx 中而不在 xy 中的元素:

 var newInXY = xx.Except(xy);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接