Contents

Stack Overflow上有个有趣的问题,如果向下面这么写,没问题。

1
Console.WriteLine( String.Format( "{0}", (object)null) );



但是如果这么写,会出一个ArgumentNullException。

1
Console.WriteLine( String.Format( "{0}", null) );


原因在于C#编译器会把null转换成最容易转到的类型,因为Fromat函数有下面几个重载:

1
2
3
4
5
Format(String, Object)
Format(String, Object[])
Format(IFormatProvider, String, Object[])
Format(String, Object, Object)
Format(String, Object, Object, Object)

而object[]可以转化成object,但是object不能转换成object[],所以编译器会调用object[]


但是从MSDN离我们可以看出如果调用object[]则需要保证format和ojbect[]都不是null,但是如果调用object版本的,只要format不是null就行了。

Contents