In Ihrem ersten Beispiel, Sie Format(String, Object)
schlagen, die aussieht so, wenn zerlegt:
public static string Format(string format, object arg0)
{
return Format(null, format, new object[] { arg0 });
}
Notiere die new object[]
um die.
Die zweite, Sie sind offensichtlich treffen die Format(string, object[])
Verwendung, mindestens das ist derjenige aufgerufen wird, wenn ich den gleichen Test durchführen. Zerlegt, sieht das wie folgt aus:
public static string Format(string format, params object[] args)
{
return Format(null, format, args);
}
So davon alle tatsächlich zu Format(IFormatProvider, string, object[])
bekommen geschleust. Cool, schauen wir uns die ersten Zeilen dort an:
public static string Format(IFormatProvider provider, string format, params object[] args)
{
if ((format == null) || (args == null))
{
throw new ArgumentNullException((format == null) ? "format" : "args");
}
...
}
... welp, da ist dein Problem, genau da! Der erste Aufruf ist das Umbrechen in ein neues Array, also ist es nicht null. Wenn Sie NULL explizit übergeben, wird dies aufgrund der spezifischen Instanz von Format()
, die aufruft, nicht ausgeführt.
Die Chancen stehen Sie schlagen den [ 'params' override] (http://msdn.microsoft.com/en-us/library/b1csw23d.aspx) im zweiten Beispiel und' String.Format' testet, dass das Array gefüllt ist, bevor es mit der Iteration über die Sammlung fortfährt und Werte einfügt. –
@BradChristie Sie sollten das als Antwort schreiben. – erikkallen