在您的第一个示例中,您正在点击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,这就是你的问题,就在那里!第一次调用是将其包装在一个新数组中,因此它不为空。Format()
由于调用的特定实例,显式传入 null 并不能使其做到这一点。