String.Format参数为空例外
下面的代码将抛出参数空exception
var test = string.Format("{0}", null); 但是,这将返回一个空string
 string something = null; var test = string.Format("{0}", something); 
只是好奇,知道为什么第二块代码不抛出exception。 这是一个错误?
 不同的是,第一段代码是调用string.Format(string, object[]) …而第二段代码是调用string.Format(string, object) 。 
  null是第二个方法的有效参数(它只是第一个占位符的值),而不是第一个(其中null通常是占位符数组 )。 特别是比较抛出NullArgumentException时的文档: 
string.Format(string, object):
格式为null
但:
string.Format(string, object[]):
格式或参数为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的完整消息是: 
值不能为空。
参数名称:参数
 这里问题的一部分是null是任何types的。 显式地将其转换为string或object (或者使用C#的default()特性)可以避免这个问题。