几个Linq.Enumerable函数需要一个IEqualityComparer<T>.是否有一个方便的包装类适应delegate(T,T)=>bool实现IEqualityComparer<T>?编写一个很容易(如果你忽略了定义正确的哈希码的问题),但我想知道是否有开箱即用的解决方案.
具体来说,我想对Dictionarys 进行集合操作,仅使用Keys来定义成员资格(同时根据不同的规则保留值).
是否可以使用C#在方法调用中将lambda表达式作为IComparer参数传递?
例如
var x = someIEnumerable.OrderBy(aClass e => e.someProperty,
(aClass x, aClass y) =>
x.someProperty > y.SomeProperty ? 1 : x.someProperty < y.SomeProperty ? -1 : 0);
Run Code Online (Sandbox Code Playgroud)
我不能完全把它编译成所以我猜不是,但看起来lambda和匿名代表之间的这种明显的协同作用让我觉得我必须做一些愚蠢的错误.
TIA
要么我缺少某些东西,要么.NET不支持Java的功能.我希望能够避免创建一个小类只是为了实现一个小接口.例如,LINQ的Except方法需要IEqualityComparer.所以我不得不写一个实现接口的小类.但是在Java中我可以简单地new IEqualityComparer() { //interface declarations }完成它并完成它.所以有什么问题?
这与这篇文章有些相关:
附加:此刻,我为Equals和添加了覆盖GetHashCode.