コードを逆コンパイルして、何が起こっているのかを理解してください。
string.Format("{0}", null)
は、適用可能な最も具体的string.Format(string, object[])
なオーバーロードを呼び出します。これはです。
のオーバーロードは次のstring.Format
とおりです。
Format(String, Object)
Format(String, Object[])
Format(IFormatProvider, String, Object[])
Format(String, Object, Object)
Format(String, Object, Object, Object)
最後の 3 つのオプションが無効である理由が明らかであることを願っています。
最初の 2 つのどちらを使用するかを決定するために、コンパイラは からへの変換と から への変換null
を比較します。からへの変換があるため、 への変換は「より良い」と見なされますが、その逆はありません。これは、次の場合と同じロジックです。Object
null
Object[]
Object[]
Object[]
Object
Foo(String)
Foo(Object)
と呼ばれるとFoo(null)
、それは を選びFoo(String)
ます。
したがって、元のコードは次と同等です。
object[] values = null;
string.Format("{0}", values);
この時点で、ドキュメンテーションに従って -が期待されることを願っています。ArgumentNullException