String.Format 和 IFormattable.ToString(format, value) 在尝试格式化为十六进制时提供不同的结果。使用 IFormattable.ToString(format, value) 时如何获得正确的结果
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}
最佳答案
格式化字符串的格式对于 string.Format()
和 ToString()
是不同的。特别是,string.Format()
允许在格式周围使用其他文本,而 IFormattable.ToString()
只允许文本本身的格式说明符。
在您的示例中,格式字符串 "0x{0:X4}"
被视为值 255 的整个格式说明符。0
是占位符数字,其余只是额外的字 rune 字。
如果您希望 IFormattable.ToString()
输出与 string.Format()
相同的结果,您必须以等效的方式使用它:
"0x" + formattableValue.ToString("X4", null);
关于c# - IFormattable.ToString 无法按预期进行十六进制格式化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33771524/