下面的代码将抛出Argument Null Exception
var test = string.Format("{0}", null);
Run Code Online (Sandbox Code Playgroud)
但是,这将返回一个空字符串
string something = null;
var test = string.Format("{0}", something);
Run Code Online (Sandbox Code Playgroud)
只是想知道为什么第二段代码不会引发异常.这是一个错误吗?
Jon*_*eet 76
区别在于第一段代码正在调用string.Format(string, object[])
...而第二段代码正在调用string.Format(string, object)
.
null
是第二种方法的有效参数(它只是第一个占位符的值),但不是第一种(null
通常是占位符数组).特别是,比较NullArgumentException
抛出何时的文档:
string.Format(string, object)
:
格式是null
但:
string.Format(string, object[])
:
format或args是null
想想string.Format(string, object)
作为正在实施的东西,如:
public static string Format(string format, Object arg0)
{
return string.Format(format, new object[] { arg0 } );
}
Run Code Online (Sandbox Code Playgroud)
因此,经过一些替换后,您的代码更接近:
// Broken code
object[] args = null; // No array at all
var test = string.Format("{0}", args);
// Working code
object[] args = new object[] { null }; // Array with 1 value
var test = string.Format("{0}", args);
Run Code Online (Sandbox Code Playgroud)
Ser*_*rvy 16
第二个代码片段调用以下重载:
Format(String, Object)
Run Code Online (Sandbox Code Playgroud)
根据文档,这里的值可以为null.
第一个代码段使用以下重载:
Format(String, Object[])
Run Code Online (Sandbox Code Playgroud)
在这里,第二个值不能为空,按文档.