扩展编译器LINQ翻译

时间:2009-10-07 21:22:27

标签: linq customization

有没有办法添加自定义linq关键字并告诉编译器如何将它们转换为实际的扩展方法?

例如,翻译单个关键字:

var color = from c in colors
            where c.IsFavorite
            select single c

var color = colors.Where( c => c.IsFavorite ).SingleOrDefault();

1 个答案:

答案 0 :(得分:2)

没有办法做到这一点。

至于为什么,我参与了VB.Net LINQ实现与C#的比较,但问题基本相同。

将LINQ添加到语言中是一项艰巨的任务。正如Eric Lippert blogged about recently所说,LINQ几乎不符合VS2008的时间表,因此,基本上只有那些绝对基本上用于发布LINQ的功能才被添加到语言中。

使LINQ可以任意扩展到用户不是这些功能之一。这也是非常昂贵的事情。现在LINQ是一个非常复杂的功能,它有一组固定的结构。允许它是任意可扩展的,至少会在以下几个方面严重夸大这些成本(特别是在IDE方面)

  • 语言设计(巨大
  • 智能感知
  • 漂亮的打印/格式化
  • 低级代码发出详细信息
  • 等...