Juste décompiler le code fonctionne, ce qu'il se passe.
string.Format("{0}", null)
les appels les plus spécifiques applicables surcharge, qui est - string.Format(string, object[])
.
Les surcharges de string.Format
sont:
Format(String, Object)
Format(String, Object[])
Format(IFormatProvider, String, Object[])
Format(String, Object, Object)
Format(String, Object, Object, Object)
J'espère que c'est évident pourquoi les trois dernières options ne sont pas valides.
À travailler sur les deux premières à utiliser, le compilateur compare la conversion de l' null
de Object
à la conversion de l' null
de Object[]
. La conversion en Object[]
est considéré comme "meilleur" car il y a une conversion de l' Object[]
de Object
, mais pas vice-versa. C'est la même logique qui, si nous avions:
Foo(String)
Foo(Object)
et appelés Foo(null)
, il serait pick Foo(String)
.
Si votre code d'origine est équivalent à:
object[] values = null;
string.Format("{0}", values);
À ce stade, nous espérons que vous auriez du attendre un ArgumentNullException
- selon les documents.