2015-11-18 36 views
4

嘗試格式化爲十六進制時,String.Format和IFormattable.ToString(format,value)提供了不同的結果。如何使用IFormattable.ToString(格式,值)時,得到正確的結果IFormattable.ToString按照預期的方式不能按照十六進制格式工作

string format = "0x{0:X4}"; 
Console.WriteLine(string.Format(format, 255)); //prints- 0x00FF 

IFormattable formattableValue = (IFormattable)255; 
Console.WriteLine(formattableValue.ToString(format, null)); //prints- 25x{5:X4} 

回答

2

格式化字符串的格式是string.Format()ToString()不同。特別是,string.Format()允許圍繞格式的其他文本,而IFormattable.ToString()只允許文本本身的格式說明符。

在您的示例中,格式字符串被視爲值爲255的整個格式說明符。0是數字的佔位符,其餘僅爲額外的字符文字。

如果你想IFormattable.ToString()輸出一樣string.Format()你有一個等價的方式來使用它:

"0x" + formattableValue.ToString("X4", null); 
相關問題