は、link here.なぜstring.FormatがArgumentNullExceptionをスローしないのですか?フォーマットは(かなり合理的)nullの場合MSDN String.Formatのによると
をスローしかし、テストは、それが唯一の2番目の引数は、同様nullの場合、二番目が移入されていない場合ことないと言います。
以下がスローしない:
string test = string.Format(null, "string");
は次のように、最初のパラメータ(フォーマット)不満スロー:
:string test = string.Format(null, null);
ソースコードは、次のメソッドを呼び出すJustDecompileとfuther掘ります
private static string FormatHelper(IFormatProvider provider, string format, ParamsArray args)
{
if (format == null)
{
throw new ArgumentNullException("format");
}
return StringBuilderCache.GetStringAndRelease(StringBuilderCache.Acquire(format.Length + args.Length * 8).AppendFormatHelper(provider, format, args));
}
フォーマットとしては意味がありませんが、例外はありません。iスローされる。何かヒント?
これは、私がメソッドの引数に 'null'ではなく' default(T) 'を渡すという習慣を得ようとした理由です。あなたが 'null'を渡すときに正しいメソッドにバインドしても、誰かがあなたのコードを破壊する過負荷を導入しないという保証はありません。さらに悪いことに、あなたはそれをしばらく気付かないかもしれません。 –
これは悪臭を過負荷にする理由です。人々がFormatByProviderのようなメソッド名を修飾するようにする。あなたはいつでも自分のメソッド名でそれを行うことができます。はい、あなたのコードは長くなります。そして、人々はこの突っ込みを呼ぶでしょう。単体テストはあなたのコードを長くしてしまい、人々はそれらが凶悪であると言っている人はいません。 – FastAl
素晴らしい。ありがとうジョン。 –