C#中把null作为参数传过去会调用哪个overload?

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

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


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

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


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

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就行了。

原文地址:https://www.cnblogs.com/fresky/p/2827816.html