C#でString.Formatに渡される引数の数に不一致がある場合に、カスタムコンパイル時エラーを追加する方法はありますか?
例えば:
String.Format("{0} and {1} are my pets", animal);
"animal"
上記の行は、2つの引数を期待しているのに、1つの引数しか渡していないため、エラーをスローするはず{0},{1}
ですが、実際には、実行時エラーのみをスローします。
C#でString.Formatに渡される引数の数に不一致がある場合に、カスタムコンパイル時エラーを追加する方法はありますか?
例えば:
String.Format("{0} and {1} are my pets", animal);
"animal"
上記の行は、2つの引数を期待しているのに、1つの引数しか渡していないため、エラーをスローするはず{0},{1}
ですが、実際には、実行時エラーのみをスローします。
FxCop /CodeAnalysisがこれを検出します。はい、VS Premium/Ultimateではコンパイル時にそれを行うことができます。
ResharperはそのためのIDE警告を追加します。ただし、これはコンパイラエラーではありません。コンパイラに関する限り、あなたが書いたものは完全に問題ありません。
カスタムコンパイル時エラーを追加することはできません。その論理エラーであり、例外
Editをスローします。
Console.WriteLine(string.Format("test{0} and {1}","test"));
それは投げます:
インデックス(ゼロベース)は、ゼロ以上で引数リストのサイズ未満である必要があります
Format1
これはひどい考えですが、、などと呼ばれる5つほどの拡張メソッドを作成しFormat2
、パラメータをハードコーディングして通常のに渡すことができますString.Format
。
フォーマット文字列は、.NETクラスライブラリの特定のメソッドの機能です。コンパイラはそれらについて何も知りません。コンパイラーは、特定のライブラリー関数を呼び出す方法ではなく、言語自体に関係することに関してのみエラーをスローできます。