不匹配是有什麼辦法可以添加自定義的編譯時錯誤時,有在傳遞的參數數量不匹配的String.format在C#在C#中極品的String.Format拋出編譯時錯誤在辯論
例如:
String.Format("{0} and {1} are my pets", animal);
上述行應該拋出一個錯誤,因爲我們已經通過只有一個參數"animal"
,而它預計2 {0},{1}
..但在現實中它拋出只是運行時錯誤。
不匹配是有什麼辦法可以添加自定義的編譯時錯誤時,有在傳遞的參數數量不匹配的String.format在C#在C#中極品的String.Format拋出編譯時錯誤在辯論
例如:
String.Format("{0} and {1} are my pets", animal);
上述行應該拋出一個錯誤,因爲我們已經通過只有一個參數"animal"
,而它預計2 {0},{1}
..但在現實中它拋出只是運行時錯誤。
的FxCop /代碼分析會挑這件事。是的,你可以在編譯時在VS Premium/Ultimate中做到這一點。
Resharper將爲此添加IDE警告。但是,這不是編譯器錯誤;就編譯器而言,你寫的東西是完全沒問題的。
你不能添加自定義編譯時錯誤。它是一個邏輯錯誤,並會拋出異常
編輯:
Console.WriteLine(string.Format("test{0} and {1}","test"));
它會拋出:
索引(從零開始)必須大於或等於零,並且小於 的參數列表的大小
格式字符串是.NET類庫中某些方法的一個特性。編譯器不知道任何關於它們的信息。編譯器只能拋出有關與語言本身有關的事情的錯誤,而不是如何調用某些庫函數。
這是一個可怕的想法,但是您可以創建五個左右的擴展方法,稱爲Format1
,Format2
等,並將參數硬編碼並傳遞給正常的String.Format
。
添加了截圖 - 希望沒關係 – 2012-04-27 12:15:19
@MarcGravell:謝謝! – 2012-04-27 12:44:31
我已經配置了在TFS2015自動構建環境中引發構建錯誤,以便在檢測到檢測到的情況下使門控檢入失敗。 IMO當第一個參數是一個字符串文字時,並且變量參數列表中的項目數量是不匹配的,它永遠不會是正確的 - 它在運行時將不可避免地失敗。最後,這是一種語法錯誤。 – dlatikay 2016-12-15 21:08:56