w pierwszym przykładzie, jesteś uderzanie Format(String, Object)
, który wygląda jak to podczas demontażu:
public static string Format(string format, object arg0)
{
return Format(null, format, new object[] { arg0 });
}
Zanotuj new object[]
wokół tego.
Po drugie, najwyraźniej uderzasz w użycie Format(string, object[])
, a przynajmniej to, które jest wywoływane, gdy wykonuję ten sam test. Zdemontowany, który wygląda tak:
public static string Format(string format, params object[] args)
{
return Format(null, format, args);
}
Więc wszystkie te rzeczywiście dostać funneled do Format(IFormatProvider, string, object[])
. Fajnie, spójrzmy na pierwsze kilka linii:
public static string Format(IFormatProvider provider, string format, params object[] args)
{
if ((format == null) || (args == null))
{
throw new ArgumentNullException((format == null) ? "format" : "args");
}
...
}
... welp, jest twój problem, właśnie tutaj! Pierwsze wywołanie jest zawijanie go w nowej tablicy, więc nie jest zerowy. Przekazywanie w wartości null jawnie tego nie powoduje, ze względu na konkretną instancję wywołującą Format()
.
Szanse są jesteś uderzanie [ 'nadpisanie params'] (http://msdn.microsoft.com/en-us/library/b1csw23d.aspx) w drugim przykładzie i' String.Format' testuje, że tablica jest wypełniana, zanim przejdzie do iteracji nad wartością kolekcji i wstawienia. –
@BradChristie Powinieneś napisać to jako odpowiedź. – erikkallen