具有null格式的String.Format

时间:2010-10-21 14:30:51

标签: c# null string.format

任何人都可以解释为什么会发生以下情况:

String.Format(null, "foo") // Returns foo
String.Format((string)null, "foo") // Throws ArgumentNullException:
                                   // Value cannot be null. 
                                   // Parameter name: format

感谢。

2 个答案:

答案 0 :(得分:10)

它调用了一个不同的重载。

string.Format(null, "");  
//calls 
public static string Format(IFormatProvider provider, string format, params object[] args);
上面描述的

MSDN Method Link

string.Format((string)null, "");
//Calls (and this one throws ArgumentException)
public static string Format(string format, object arg0);
上面描述的

MSDN Method Link

答案 1 :(得分:1)

因为调用了哪个重载函数,所以在编译时根据参数的静态类型确定:

String.Format(null, "foo")

使用空的IFormatProvider和格式化字符串“foo”调用String.Format(IFormatProvider, string, params Object[]),这非常好。

另一方面,

String.Format((string)null, "foo")

使用null作为格式化字符串调用String.Format(string, object),这会引发异常。