簡體   English   中英

String.Format參數Null Exception

[英]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)
formatnull

但:

string.Format(string, object[])
formatargsnull

想象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是任何類型的。 將其顯式地轉換為stringobject (或使用C# default()功能)可以避免此問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM