任何人都可以解释为什么会发生以下情况:
String.Format(null, "foo") // Returns foo
String.Format((string)null, "foo") // Throws ArgumentNullException:
// Value cannot be null.
// Parameter name: format
感谢。
答案 0 :(得分:10)
它调用了一个不同的重载。
string.Format(null, "");
//calls
public static string Format(IFormatProvider provider, string format, params object[] args);
上面描述的
string.Format((string)null, "");
//Calls (and this one throws ArgumentException)
public static string Format(string format, object arg0);
上面描述的
答案 1 :(得分:1)
因为调用了哪个重载函数,所以在编译时根据参数的静态类型确定:
String.Format(null, "foo")
使用空的IFormatProvider和格式化字符串“foo”调用String.Format(IFormatProvider, string, params Object[])
,这非常好。
另一方面,
String.Format((string)null, "foo")
使用null作为格式化字符串调用String.Format(string, object)
,这会引发异常。