2010-08-08 113 views
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); 
     } 
    } 
} 

回答

1

你可以得到是XX,但在XY使用LINQ元素:

var newInXY = xx.Except(xy); 
2

从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; 
} 
循环解决这个问题