c# - 具有 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>>'
.
它实际上是什么意思?
在我看来,该程序应该只是替换TElement
为List<int>
并继续,但显然这里发生了一些不同的事情。我有点困惑,因为我最近实现了另一个 EqualityComparer,并且这些行
MyStructureEqualityComparer<int, ulong> MSEC= new MyStructureEqualityComparer<int, ulong>();
HashSet<MyStructure<int, ulong>> test = new HashSet<MyStructure<int,ulong>>(MSEC);
我们很好。我做错了什么?
解决方案
推荐阅读
- python - 为什么我的按钮没有变灰也没有边框?
- spring - 如何从 REST 控制器中的 Post 方法调用 Put 方法
- typescript - 如何将对象的键限制为打字稿中的设置字符串列表
- sql - PLS-00103:尝试使用立即执行时出错
- mips - 如何在汇编中对 PIC32 进行编程?
- mysql - 在 From 子句中创建子查询以引用归档表
- wordpress - 尝试安装主题和插件的绑定挂载卷上的 docker/wordpress/docker-compose 权限
- python-3.x - 系统找不到指定的文件 - WinError 2
- drupal-8 - 使用 Drupal 8 规则创建新节点
- java - 数组列表
对象指向空。为什么?