質問

次の理由を誰でも説明できますか?

String.Format(null, "foo") // Returns foo
String.Format((string)null, "foo") // Throws ArgumentNullException:
                                   // Value cannot be null. 
                                   // Parameter name: format

ありがとう。

役に立ちましたか?

解決

それは異なる過負荷を呼び出します。

string.Format(null, "");  
//calls 
public static string Format(IFormatProvider provider, string format, params object[] args);

MSDNメソッドリンク 上記の説明。

string.Format((string)null, "");
//Calls (and this one throws ArgumentException)
public static string Format(string format, object arg0);

MSDNメソッドリンク 上記の説明。

他のヒント

どのオーバーロードされた関数が呼び出されるため、パラメーターの静的タイプに基づいてコンパイル時間で決定されます。

String.Format(null, "foo")

電話 String.Format(IFormatProvider, string, params Object[]) 空のiformatproviderと「foo」のフォーマット文字列があります。これは完全に問題ありません。

一方で、

String.Format((string)null, "foo")

電話 String.Format(string, object) nullをフォーマット文字列として使用すると、例外がスローされます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top