2009-10-07 44 views
1

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

例如,翻译关键字:

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

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

回答

2

没有没有办法做到这一点。至于为什么,我从事VB.Net LINQ实现与C#的工作,但问题大部分是相同的。

向语言添加LINQ是一项艰巨的任务。正如Eric Lippert拥有的blogged about recently,LINQ几乎不适合VS2008的时间安排,因此,基本上只有那些绝对必须运输LINQ的功能才被添加到该语言中。

使LINQ可以任意扩展到用户不是这些功能之一。这也会是非常昂贵的。现在LINQ是一个非常复杂的功能,它有一组固定的构造。允许它被任意扩展会至少在以下几个方面

  • 语言程序设计(巨大
  • 智能感知
  • 漂亮的打印/格式化
  • 严重夸大这些成本(尤其是在IDE侧)
  • 低位码发出的信息
  • 等...
+0

:)短期和简单的答案我猜测。任何更具体的信息为什么不呢?是因为编译器是封闭源码,C#标准等有特定的限制吗? – 2009-10-07 21:25:33

+0

@Paul,为什么添加了一个简短的解释。 – JaredPar 2009-10-07 21:38:18

+0

感谢您的好评! – 2009-10-07 23:09:33