コードを逆コンパイルして、何が起こっているのかを理解してください。
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を比較します。からへの変換があるため、 への変換は「より良い」と見なされますが、その逆はありません。これは、次の場合と同じロジックです。ObjectnullObject[]Object[]Object[]Object
Foo(String)
Foo(Object)
と呼ばれるとFoo(null)、それは を選びFoo(String)ます。
したがって、元のコードは次と同等です。
object[] values = null;
string.Format("{0}", values);
この時点で、ドキュメンテーションに従って -が期待されることを願っています。ArgumentNullException