有没有办法添加自定义linq关键字并告诉编译器如何将它们转换为实际的扩展方法?
例如,翻译单个关键字:
var color = from c in colors
where c.IsFavorite
select single c
要
var color = colors.Where( c => c.IsFavorite ).SingleOrDefault();
答案 0 :(得分:2)
没有办法做到这一点。
至于为什么,我参与了VB.Net LINQ实现与C#的比较,但问题基本相同。
将LINQ添加到语言中是一项艰巨的任务。正如Eric Lippert blogged about recently所说,LINQ几乎不符合VS2008的时间表,因此,基本上只有那些绝对基本上用于发布LINQ的功能才被添加到语言中。
使LINQ可以任意扩展到用户不是这些功能之一。这也是非常昂贵的事情。现在LINQ是一个非常复杂的功能,它有一组固定的结构。允许它是任意可扩展的,至少会在以下几个方面严重夸大这些成本(特别是在IDE方面)