У меня есть классы:
class SomeClass
{
   public string Name{get;set;}
   public int SomeInt{get;set;}
}
class SomeComparison: IEqualityComparer<SomeClass>
{
     public bool Equals(SomeClass s, SomeClass d)
     {
         return s.Name == d.Name;
     }
     public int GetHashCode(SomeClass a)
     {
         return (a.Name.GetHashCode() * 251);
     }
}
У меня также есть два больших List<SomeClass>, называемых list1 и list2
прежде чем я использовал:
 var q = (from a in list1
         from b in list2
         where a.Name != b.Name
         select a).ToList();
и это заняло около 1 минуты. Теперь у меня есть:
var q =  list1.Except(list2,new SomeComparison()).ToList();
и это занимает менее 1 секунды!
Я хотел бы понять, что делает метод Except. Создает ли метод хэш-таблицу каждого списка, а затем выполняет одно и то же сравнение? Если я буду выполнять много этих сравнений, я должен создать Hashtable вместо этого?
ИЗМЕНИТЬ
Теперь вместо списков у меня есть два HashSet<SomeClass>, называемый hashSet1 и hashSet2
когда я это сделаю:
   var q = (from a in hashSet1
           form b in hashSet2
           where a.Name != b.Name
           select a).ToList();
который все еще занимает много времени... Что я делаю неправильно?