0
我正在使用實現System.IFormattable
接口的類創建API。爲了幫助理清實現細節,我對mscorlib中的現有IFormattable
結構進行了一些測試。我很驚訝,通過執行以下代碼的結果:System.IFormattable.Format(...)的實現應該引發異常嗎?
string s1 = int.MaxValue.ToString("ABC", CultureInfo.CurrentCulture);
string s2 = DateTime.Now.ToString("ABC", CultureInfo.CurrentCulture);
而不是拋出異常的無法識別的格式字符串,無論是方法調用只是返回的字符串"ABC"
。
當我嘗試:
string s3 = int.MinValue.ToString("ABC", CultureInfo.CurrentCulture);
返回"-ABC"
,這是什麼意外的行爲的原因,是它應遵循所有IFormattable
類模式(?!?!)?
顯然,沒有預定義格式說明符的字符會作爲文字字符複製到「ToString」的輸出中。如果沒有格式說明符和佔位符(如{0}),則只會顯示文字字符,不會顯示數字。然而,不確定爲什麼總是在輸出中出現負數的減號,而與剩餘的格式字符串無關。也不知道爲什麼像'.ToString(「A」)''這樣的單個文字會導致異常。 –
對於某些類型,格式字符串是字面文本和佔位符的混合,原則上這是一個有用的功能。但我不是「每個未知字符都是字面上的」規則的粉絲,因爲它會阻止未來添加新的佔位符。 – CodesInChaos