String.Format()的意外行为

Nat*_*lor 4 c# string

给定以下代码,我会期望一个空结果或异常:

String.Format(null, "Hello")
Run Code Online (Sandbox Code Playgroud)

相反,结果是字符串"Hello".为什么是这样?

Kir*_*oll 10

它正在工作,因为它选择了这个重载:

public static String Format( IFormatProvider provider, String format, params Object[] args) { ... }
Run Code Online (Sandbox Code Playgroud)

一个null供应商是确定的,没有参数的可变参数也行,所以它只是打印出的字符串.

直觉上,我们可能已经预料到这种过载:

public static String Format(String format, Object arg0) { ... }
Run Code Online (Sandbox Code Playgroud)

当然,如果它确实选择了那个,我们就会得到一个ArgumentNullException.