2011-05-15 62 views
6

有沒有人曾試圖在.NET 4.0下使用System.CodeDom生成擴展方法?似乎沒有任何方式將CodeMemberMethod或CodeParameterDeclarationExpression指定爲擴展方法/參數。使用System.CodeDom生成擴展方法

如果這是不可能的,有沒有什麼好的解決方法?

感謝

回答

6

顯然CodeDom中是無法生成擴展方法的第一個參數正確的代碼,但你可以欺騙它是這樣的:

var param = new CodeParameterDeclarationExpression("this string", "s"); 

它會幸福地忽略了一個事實,「這字符串「不是有效的類型...

+0

呵呵。簡單FTW – sehe 2011-05-15 22:29:06

+0

這實際上很適合我的需求。我使用擴展方法的語法原因,沒有更多的,所以沒有成員的「這個」參數將永遠不會被訪問,所以我甚至不必擔心在System.CodeDom中的任何類型檢查...感謝您的想法 – LorenVS 2011-05-15 23:27:40

0

Extension Attribute

報價:

在Visual Basic中,你應該使用這個屬性來創建一個擴展方法。有關更多信息,請參見擴展方法(Visual Basic)。

在C#中,您不需要使用此屬性;你應該使用這個(C#引用)修飾符作爲第一個參數來創建一個擴展方法。編譯器自動爲擴展方法發出ExtensionAttribute。有關更多信息,請參閱擴展方法(C#編程指南)。

如果您正在編寫一個支持擴展方法的編譯器,那麼您的編譯器應該在每個擴展方法以及包含一個或多個擴展方法的每個類和程序集上發出該屬性。

+1

它只會將ExtensionAttribute應用於該方法,這是C#中的錯誤...編譯器說要使用」this「修飾符代替 – 2011-05-15 22:20:46

+0

您是否嘗試使用編譯器或反射發射?我可能誤解了你的問題,如果你是指某種in-IDE腳本/插件,也就是說,你可能會考慮使用[Compiler As A Service](http://weblogs.asp.net/britchie/archive/2010/08/08-c-compiler-as-a-service.aspx),無論如何 – sehe 2011-05-15 22:27:02

+1

我正在使用System.CodeDom,它是標準.NET框架中包含的用於生成代碼文件(或程序集)的庫。 – LorenVS 2011-05-15 23:26:44