首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >匿名IComparer实现

匿名IComparer实现
EN

Stack Overflow用户
提问于 2011-03-13 19:06:04
回答 8查看 30.6K关注 0票数 53

有没有可能定义IComparer的匿名实现?

我相信Java允许匿名类被内联定义-- C#呢?

看一下这段代码,我想定义一个自定义的内联IComparer

代码语言:javascript
复制
public static IOrderedEnumerable<TSource> OrderBy<TSource, TKey>(
    this IEnumerable<TSource> source,
    Func<TSource, TKey> keySelector,
    IComparer<TKey> comparer
)
EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-03-13 19:08:51

不,C#目前不允许内联接口实现;尽管它允许您通过lambda表达式和匿名方法内联创建委托。

在您的情况下,我建议使用一个易于使用此功能的ProjectionComparer,例如列出的here

票数 8
EN

Stack Overflow用户

发布于 2015-02-16 10:57:40

正如下面的一条注释所指出的,.Net 4.5允许通过Comparer<>类上的静态方法实现这一点,例如,基于类中属性的值比较两个对象:

代码语言:javascript
复制
var comparer = Comparer<KilowattSnapshot>.Create( 
        (k1, k2) => k1.Kilowatt.CompareTo(k2.Kilowatt) );

显然,这可以内联使用,而不是赋值给变量。

票数 53
EN

Stack Overflow用户

发布于 2011-03-13 19:32:38

尽管您不能创建实现接口的匿名类,但在大多数情况下(如排序等),您通常可以使用Comparison Delegate而不是IComparer Interface

代码语言:javascript
复制
Array.Sort(arr, (x, y) => 1);

还有一些内置的IComparer实现,比如Comparer ClassStringComparer Class……

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5288963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档