7

有什麼辦法可以禁用在.net 4中使用「dynamic」關鍵字嗎?C# - 禁用動態關鍵字

我認爲VS2010的代碼分析功能可能會有一個規則,如果動態關鍵字被使用,但我不能罰款。

+7

爲什麼?動態沒有什麼壞處。 – 2010-05-07 20:20:07

+11

您是否試圖在開發團隊中強制執行此操作?在那種情況下,我建議兩個工具:grep和一個板球棒。 – 2010-05-07 20:22:16

+0

板球蝙蝠?來吧,牛鞭更有效。 http://www.enasco.com/product/C13638N – 2010-05-07 20:29:24

回答

5

它是C#4.0語言的一部分,所以不是真的。

您可以使用FXCop來查找它,如果遇到它,則會失敗。

風格警察可能代替工作:

http://code.msdn.microsoft.com/sourceanalysis

這裏是談論同樣的問題,以及如何風格警察可能是答案的鏈接。還有一篇關於如何讓FX警察潛在尋找動態關鍵字的文章,儘管它並不完美。

http://social.msdn.microsoft.com/Forums/en/vstscode/thread/8ce407ba-bdf7-422b-bbcd-ca4701c3a76f

+0

我會試試這個。 – chief7 2010-05-07 20:51:31

+0

事實證明,FxCop可以通過DynamicAttribute找到動態類級字段,方法參數和方法返回,但是在方法b/c中找不到本地變量,因爲它們被轉換爲沒有任何屬性的對象。 – chief7 2010-05-12 18:57:16

+0

@ cheif7我做了一些更多的外觀和風格的警察可能是要走的路。我發佈了一些關於同一問題的帖子的鏈接。 – kemiller2002 2010-05-12 20:27:51

2

Target .net 1.0? :-)

或者做代碼評論。

(或者,少開玩笑,應該是很容易編寫自定義的FxCop或CA規則不允許使用動態)

難道你剛纔殺了C++的宏嗎? :-)

+0

#define動態對象 – 2010-05-07 20:41:39

2

動態關鍵字不是邪惡的,但使用它可能是。

它導致您只能在運行時找到代碼錯誤。 這應該避免不惜一切代價。 運行時錯誤是不好的。編譯時間錯誤很好。

您可以使用類似下面的內容來設置自己的標準。 http://joel.fjorden.se/static.php?page=CodeStyleEnforcer

+2

反射也是如此。雖然沒有人會反思,但它只是一種理解,它是一個非常具體的工具,用於一個非常具體的工作,並且有時,perf的打擊和缺乏編譯時間的錯誤是值得的,因爲實際上沒有其他方法可以確定種類的東西。動態的同上。在任何地方默認使用它都是無稽之談,但同時,有一些類型的東西需要權衡。 – 2010-06-18 13:26:30

+0

從磁盤讀取可能無效的文件,或者假設存在註冊表或配置文件等,也是「僅在運行時發現的」。 :-) – 2012-04-17 00:51:13

2

刪除對Microsoft.CSharp.dll的引用,我認爲dynamic的所有用法都可能無法編譯。

1

我不確定我明白這對動態關鍵字的非理性恐懼是什麼。這種類型的歇斯底里超過匿名變量和var關鍵字的.NET 3.5,除了那只是白癡,因爲那些是合法的靜態定義類型。

動態關鍵字提供了一個高度專業化的目的,我不明白爲什麼任何人會有理由使用它,而不理解爲什麼。但是,通過1次團隊會議解釋.NET 4的一些新功能,包括動態關鍵字,可以解決這一問題。我假設你更多的是團隊中的高級或高級主管;應該很容易告訴你的團隊他們是否覺得他們需要使用動態關鍵字來看你第一。

這正是我給我團隊的指示,因爲我發現不太可能使用動態關鍵字,因爲我們不寫COM互操作活動。過去我會將任何類型的動態代理服務器推遲到像Linfu或Castle這樣的已建立的庫中,並且將動態代理服務器的實現留給他們使用或不使用動態關鍵字。

+0

我相信,動態可以用於超過COM互操作.... – Amir 2012-12-28 21:41:50