我和String.Format()正面临着一个奇怪的问题。我需要格式化两个十六进制数字与前导零,以垫最多8位数。但是,它只适用于第一个参数({0:X8})。对于第二个参数({1:X8}),只打印"X8“。
这是我的密码:
public struct DataDirectory
{
public uint VirtualAddress
{
get;
internal set;
}
public uint Size
{
get;
internal set;
}
public override string ToString()
{
return String.Format("{{VirtualAddress=0x{0:X8},Size=0x{1:X8}}}", VirtualAddress, Size);
}
}调试器输出的输出如下:

编辑:如果在格式字符串的开头和结尾移除大括号,它似乎会工作,但在从ToString()返回的字符串中缺少那些大括号(调试器仍然将这些大括号添加到QuickWatch窗口中):
return String.Format("VirtualAddress=0x{0:X8},Size=0x{1:X8}", VirtualAddress, Size);可以用String.Format()格式化两个十六进制数吗?
发布于 2015-02-28 11:14:57
小心所有那些关闭大括号}}}。您可以为它使用单独的格式项,如在Size=0x{1:X8}{2}中。所以:
String.Format("{{VirtualAddress=0x{0:X8},Size=0x{1:X8}{2}",
VirtualAddress, Size, "}"
){1:X8}}}的问题是,不清楚哪个双}}是转义},以及哪个}正在关闭该项目。解析器实际上调用了Size.ToString("X8}"),这不是您想要的。
现在你要朝那个方向走,也许你要这样做:
String.Format("{2}VirtualAddress=0x{0:X8},Size=0x{1:X8}{3}",
VirtualAddress, Size, "{", "}"
)https://stackoverflow.com/questions/28781022
复制相似问题