[英]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.