我如何比较两个通用集合?

时间:2010-08-08 10:51:32

标签: c# .net visual-studio

如何比较两个通用集合?这是我尝试使用两个字符串数组,但它不会返回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 个答案:

答案 0 :(得分:8)

致电Enumerable.SequenceEqual

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);