2010-08-08 3 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

Вы можете получить элементы, которые находятся в хх, но не в ху с помощью LINQ:

var newInXY = xx.Except(xy); 
2

Из MSDN documenation:

Стандартная реализация равных поддерживает только ссылочное равенство, но производные классы могут переопределить этот метод для поддержки равенства значений.

В вашем случае xx и yy являются двумя разными экземплярами строки [], поэтому они никогда не равны. Вы должны были бы переопределить метод .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; 
} 
Смежные вопросы