【发布时间】:2009-05-19 07:44:35
【问题描述】:
目前允许您自己定义相等比较的HashSet<T> 构造函数是HashSet<T>(IEqualityComparer<T> comparer) 构造函数。
我想将此 EqualityComparer 定义为 lambda。
我发现this blog post 已经创建了一个类,该类允许您通过 lambda 生成比较器,然后使用扩展方法隐藏该类的构造以执行例如 except()。
现在我想做同样的事情,但使用构造函数。是否可以通过扩展方法创建构造函数?或者有没有其他方法可以创建一个HashSet<T>(Func<T,T,int> comparer)?
--更新--
为清楚起见,这是我正在尝试完成的(一个 sn-p 的)手绘版本:
HashSet<FileInfo> resultFiles = new HashSet<FileInfo>(
srcPath.GetFiles(),
new LambdaComparer<FileInfo>(
(f1, f2) => f1.Name.SubString(10).Equals(f2.Name.SubString(10))));
或者更理想的
HashSet<FileInfo> resultFiles = new HashSet<FileInfo>(
srcPath.GetFiles(),
(f1, f2) => f1.Name.SubString(10).Equals(f2.Name.SubString(10)));
【问题讨论】:
-
那篇博文被 IMO 破坏了——它只通过调用原始哈希码来生成哈希码,这将导致哈希与相等函数不兼容。我已经在博客上发表了评论。
标签: c# .net lambda iequalitycomparer