Я хочу создать структуру List<List<int>>
, чтобы можно было добавлять только отдельные последовательности чисел. Для этого я создаю EqualityComparer следующим образом:
public class ListEqualityComparer<TElement> : EqualityComparer<List<TElement>>
{
Object hashHelp1 = new Object();
Object hashHelp2 = new Object();
public override bool Equals(List<TElement> x, List<TElement> y)
{
if (x == null && y == null)
return true;
else if (x == null || y == null)
return false;
else if (x.SequenceEqual(y))
return true;
else
return false;
}
public override int GetHashCode(List<TElement> obj)
{
return (hashHelp1, hashHelp2).GetHashCode();
}
}
, поэтому я хочу, чтобы два списка считались равными, если их последовательности элементов равны.
Однако, если я пытаюсь создать
ListEqualityComparer<List<int>> LEC = new ListEqualityComparer<List<int>>();
List<List<int>> list = new List<List<int>>(LEC);
Я получаю сообщение об ошибке:
Argument 1: cannot convert from 'MyNamespace.MyFolder.ListEqualityComparer<System.Collections.Generic.List<int>>' to 'System.Collections.Generic.IEnumerable<System.Collections.Generic.List<int>>'
.
Что это на самом деле означает?
По моему мнению, программа должна просто заменить TElement
на List<int>
и go, но, очевидно, здесь происходит нечто иное. Я как-то растерялся, потому что недавно внедрил другой EqualityComparer, и строки
MyStructureEqualityComparer<int, ulong> MSEC= new MyStructureEqualityComparer<int, ulong>();
HashSet<MyStructure<int, ulong>> test = new HashSet<MyStructure<int,ulong>>(MSEC);
были в порядке. Что я делаю не так?