hau*_*ous 61 c# lambda icomparer
是否可以使用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
Jep*_*sen 72
如果您使用的是.NET 4.5,则可以使用静态方法Comparer<aClass>.Create.
例:
var x = someIEnumerable.OrderBy(e => e.someProperty,
Comparer<aClass>.Create((x, y) => x.someProperty > y.SomeProperty ? 1 : x.someProperty < y.SomeProperty ? -1 : 0)
);
Run Code Online (Sandbox Code Playgroud)
Tim*_*lds 52
正如Jeppe指出的那样,如果您使用的是.NET 4.5,则可以使用静态方法Comparer<T>.Create.
如果没有,这是一个应该是等效的实现:
public class FunctionalComparer<T> : IComparer<T>
{
private Func<T, T, int> comparer;
public FunctionalComparer(Func<T, T, int> comparer)
{
this.comparer = comparer;
}
public static IComparer<T> Create(Func<T, T, int> comparer)
{
return new FunctionalComparer<T>(comparer);
}
public int Compare(T x, T y)
{
return comparer(x, y);
}
}
Run Code Online (Sandbox Code Playgroud)