C#中把null作为参数传过去会调用哪个overload?
Contents
Stack Overflow上有个有趣的问题,如果向下面这么写,没问题。
1 | Console.WriteLine( String.Format( "{0}", (object)null) ); |
但是如果这么写,会出一个
ArgumentNullException。
1 | Console.WriteLine( String.Format( "{0}", null) ); |
原因在于C#编译器会把null转换成最容易转到的类型,因为Fromat函数有下面几个重载:
1 | Format(String, Object) |
而object[]可以转化成object,但是object不能转换成object[],所以编译器会调用object[]。
但是从MSDN离我们可以看出如果调用object[]则需要保证format和ojbect[]都不是null,但是如果调用object版本的,只要format不是null就行了。