2009-10-07 45 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