任何人都可以解釋爲什麼會出現以下情況:的String.Format與空格式
String.Format(null, "foo") // Returns foo
String.Format((string)null, "foo") // Throws ArgumentNullException:
// Value cannot be null.
// Parameter name: format
感謝。
任何人都可以解釋爲什麼會出現以下情況:的String.Format與空格式
String.Format(null, "foo") // Returns foo
String.Format((string)null, "foo") // Throws ArgumentNullException:
// Value cannot be null.
// Parameter name: format
感謝。
它調用不同的過載。
string.Format(null, "");
//calls
public static string Format(IFormatProvider provider, string format, params object[] args);
MSDN Method Link如上所述。
string.Format((string)null, "");
//Calls (and this one throws ArgumentException)
public static string Format(string format, object arg0);
MSDN Method Link如上所述。
由於其超載函數被調用獲取基於所述靜態類型的參數的編譯時確定:
String.Format(null, "foo")
呼叫String.Format(IFormatProvider, string, params Object[])
用空的IFormatProvider和「富」,的格式串是完全沒有。
在另一方面,
String.Format((string)null, "foo")
電話String.Format(string, object)
用null作爲一個格式化字符串,它拋出一個異常。
我想我們應該拋出一個提醒,拿起一個RedGate反射器的副本,這樣看起來更容易。 ;) – jcolebrand 2010-10-21 14:35:25
嗯...我寧願去看看MSDN文檔,而不是深入這種信息的反射器。或者我在某個地方錯過了一個笑話(是的,通常反射器是好的,每個人都應該擁有它)。 – Chris 2010-10-21 14:40:06
你的意思是Lutz Roeder's Reflector? (我還沒有接受售完) – 2010-10-21 14:41:43