[英]String.Format Argument Null Exception
下面的代码将抛出Argument Null Exception
var test = string.Format("{0}", null);
但是,这将返回一个空字符串
string something = null;
var test = string.Format("{0}", something);
只是想知道为什么第二段代码不会引发异常。 这是一个错误吗?
区别在于第一段代码是调用string.Format(string, object[])
...而第二段代码是调用string.Format(string, object)
。
null
是第二个方法的有效参数(它只是第一个占位符的值),但不是第一个( null
通常是占位符数组 )。 特别是,比较抛出NullArgumentException
时的文档:
string.Format(string, object)
:
format为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 } );
}
因此,经过一些替换后,您的代码更接近:
// 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);
第二个代码片段调用以下重载:
Format(String, Object)
根据文档,这里的值可以为null。
第一个代码段使用以下重载:
Format(String, Object[])
根据文档, 第二个值不能为null 。
现有答案未提及的一个小问题,几乎使问题没有实际意义:
ArgumentNullException
的完整消息是:
值不能为空。
参数名称:args
此处的部分问题是null
是任何类型的。 将其显式地转换为string
或object
(或使用C# default()
功能)可以避免此问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.