引数

2012-04-27 11 views
4

に不一致のための時間コンパイルエラースローするC#でString.Formatのための必要性のC#引数

でString.Formatのに渡される引数の数の不一致があるとき時エラーをコンパイルカスタム追加する方法はあります例えば:それは2 {0},{1}を期待している間に私たちは、一つだけの引数"animal"に合格しているので、

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

上の行はエラーをスローする必要があります..しかし、現実にはそれだけの時間エラーを実行して投げます。

答えて

4

FxCopの/コード分析はこれをピックアップします。そして、はい、あなたはVS Premium/Ultimateのコンパイル時にそれを行うことができます。

enter image description here

+0

を追加しました。ありがとうございました –

+0

@MarcGravell:ありがとうございました! –

+0

TFS2015自動ビルド環境でビルドエラーをスローし、ゲーテッドチェックインが検出されるたびに失敗するように設定しました。最初の引数が文字列リテラルで、可変引数リスト内の項目の数が指定されていて不一致の場合、それは決して正しいものではなく、実行時に必然的に失敗します。結局、それは文法エラーのようなものです。 – dlatikay

3

ResharperがIDE警告を追加します。しかし、これはコンパイラエラーではありません。あなたが書いたことは、コンパイラが関係している限り、完璧です。

enter image description here

1

カスタム追加時のエラーをコンパイルすることはできません。その論理エラーやスローされます例外

編集:

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

それがスローされます。

インデックス(ゼロベース)ゼロ未満 以上である必要があります引数リストのサイズ

+0

実行時にスローされます。 – Joey

+0

@Joey、はい、 "インデックス(0から始まる)は0より大きく、引数リストのサイズより小さくなければなりません" – Habib

+0

これはちょっとした問題ではなく、単に論理エラー«とは矛盾します。 – Joey

0

フォーマット文字列は、.NETクラスライブラリの特定のメソッドの機能です。コンパイラはそれらについて何も知らない。コンパイラは、の言語と関係のあるものに関してのみエラーを投げることができます。

0

これはひどい考えですが、Format1,Format2など5種類の拡張メソッドを作成し、パラメータをハードコードして通常のString.Formatに渡すことができます。