La différence est que le premier morceau de code appelle string.Format(string, object[])
... tandis que le deuxième morceau de code appelle string.Format(string, object)
.
null
est un argument valide pour la deuxième méthode (on s'attend simplement à ce qu'il s'agisse de la valeur du premier caractère générique), mais pas pour la première (où l'attribut null
serait généralement le tableau de placeholders). En particulier, comparez la documentation pour savoir quand NullArgumentException
est lancé :
string.Format(string, object)
:
format est null
Mais :
string.Format(string, object[])
:
format ou Arguments est null
Pensez à string.Format(string, object)
comme étant mis en œuvre quelque chose comme :
public static string Format(string format, Object arg0)
{
return string.Format(format, new object[] { arg0 } );
}
Donc après un peu de remplacement, votre code est plus proche de :
// Broken code
object[] args = null; // No array at all
var test = string.Format("{0}", args);
// Working code
object[] args = new object[] { null }; // Array with 1 value
var test = string.Format("{0}", args);