在你的第一個例子,你打Format(String, Object)
,看起來喜歡這個時拆解:
public static string Format(string format, object arg0)
{
return Format(null, format, new object[] { arg0 });
}
注意圍繞這new object[]
。
第二個,你顯然正在使用Format(string, object[])
用法,至少這是我執行相同測試時調用的那個。拆卸,看起來像這樣:
public static string Format(string format, params object[] args)
{
return Format(null, format, args);
}
因此,所有這些實際上得到漏斗來Format(IFormatProvider, string, object[])
。酷,讓我們看看那裏的頭幾行:
public static string Format(IFormatProvider provider, string format, params object[] args)
{
if ((format == null) || (args == null))
{
throw new ArgumentNullException((format == null) ? "format" : "args");
}
...
}
...... welp,有你的問題,就在那裏!第一個調用將它包裝在一個新的數組中,所以它不是null。由於調用的Format()
的特定實例,明確傳入空值不會這樣做。
機會是你打的第二個例子,'String.Format'的['params'覆蓋](http://msdn.microsoft.com/en-us/library/b1csw23d.aspx)在繼續迭代集合和插入值之前測試數組是否已填充。 –
@BradChristie你應該寫這個答案。 – erikkallen