2012-04-27 10 views
4

不匹配是有什麼辦法可以添加自定義的編譯時錯誤時,有在傳遞的參數數量不匹配的String.format在C#在C#中極品的String.Format拋出編譯時錯誤在辯論

例如:

String.Format("{0} and {1} are my pets", animal); 

上述行應該拋出一個錯誤,因爲我們已經通過只有一個參數"animal",而它預計2 {0},{1} ..但在現實中它拋出只是運行時錯誤。

回答

4

的FxCop /代碼分析會挑這件事。是的,你可以在編譯時在VS Premium/Ultimate中做到這一點。

enter image description here

+0

添加了截圖 - 希望沒關係 – 2012-04-27 12:15:19

+0

@MarcGravell:謝謝! – 2012-04-27 12:44:31

+0

我已經配置了在TFS2015自動構建環境中引發構建錯誤,以便在檢測到檢測到的情況下使門控檢入失敗。 IMO當第一個參數是一個字符串文字時,並且變量參數列表中的項目數量是不匹配的,它永遠不會是正確的 - 它在運行時將不可避免地失敗。最後,這是一種語法錯誤。 – dlatikay 2016-12-15 21:08:56

3

Resharper將爲此添加IDE警告。但是,這不是編譯器錯誤;就編譯器而言,你寫的東西是完全沒問題的。

enter image description here

1

你不能添加自定義編譯時錯誤。它是一個邏輯錯誤,並會拋出異常

編輯:

Console.WriteLine(string.Format("test{0} and {1}","test")); 

它會拋出:

索引(從零開始)必須大於或等於零,並且小於 的參數列表的大小

+0

它會在運行時拋出。 – Joey 2012-04-27 12:14:44

+0

@Joey,是的,它會拋出「索引(基於零)必須大於或等於零,並小於參數列表的大小」 – Habib 2012-04-27 12:17:44

+0

這有點矛盾,這不是一個嚴重的問題,只是一個邏輯錯誤«。 – Joey 2012-04-27 12:20:58

0

格式字符串是.NET類庫中某些方法的一個特性。編譯器不知道任何關於它們的信息。編譯器只能拋出有關與語言本身有關的事情的錯誤,而不是如何調用某些庫函數。

0

這是一個可怕的想法,但是您可以創建五個左右的擴展方法,稱爲Format1,Format2等,並將參數硬編碼並傳遞給正常的String.Format