首页 > 解决方案 > 具有 EqualityComparer 的唯一序列列表

问题描述

我想创建一个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>>'.

它实际上是什么意思?

在我看来,该程序应该只是替换TElementList<int>并继续,但显然这里发生了一些不同的事情。我有点困惑,因为我最近实现了另一个 EqualityComparer,并且这些行

MyStructureEqualityComparer<int, ulong> MSEC= new MyStructureEqualityComparer<int, ulong>();
HashSet<MyStructure<int, ulong>> test = new HashSet<MyStructure<int,ulong>>(MSEC);

我们很好。我做错了什么?

标签: c#.netiequalitycomparer

解决方案


推荐阅读