是否可以定义IComparer的匿名实现?
我相信Java允许内联定义匿名类 - C#?
看看这段代码我想定义一个自定义IComparer
内联
public static IOrderedEnumerable<TSource> OrderBy<TSource, TKey>(
this IEnumerable<TSource> source,
Func<TSource, TKey> keySelector,
IComparer<TKey> comparer
)
Run Code Online (Sandbox Code Playgroud)
Dav*_*rke 37
如下面的评论之一所示,.Net 4.5通过Comparer <>类上的静态方法允许此操作,例如,根据类中属性的值比较两个对象:
var comparer = Comparer<KilowattSnapshot>.Create(
(k1, k2) => k1.Kilowatt.CompareTo(k2.Kilowatt) );
Run Code Online (Sandbox Code Playgroud)
显然,这可以用于内联而不是分配给变量.
apo*_*fos 13
.NET framework 4.5版提供了Comparer.Create(Comparison)方法,用于根据指定的比较委托(可以是lambda函数)创建比较器.然而,使用早期版本的.NET的人可能需要自己实现类似的东西.
Jar*_*dek 12
即使您无法创建实现接口的匿名类,在大多数情况下(例如排序等),通常可以使用比较代理而不是IComparer接口:
Array.Sort(arr, (x, y) => 1);
Run Code Online (Sandbox Code Playgroud)
还有一些内置的实现,IComparer
比如Comparer Class或StringComparer Class ......