【发布时间】:2016-10-13 08:42:09
【问题描述】:
输入: uint hex = 0xdeadbeef;
所需输出: string result = "{deadbeef}"
第一种方法:显式添加{和};这行得通:
result = "{" + string.Format("{0:x}", hex) + "}"; // -> "{deadbeef}"
使用转义的大括号输出为十进制而不是十六进制:
result = string.Format("{{{0}}}", hex); // -> "{3735928559}"
看起来很有希望,现在我们需要做的就是按照上面的第一种方法添加 :x 十六进制说明符:
result = string.Format("{{{0:x}}}", hex); // -> "{x}"
天哪,添加':x 使其输出"{x}" 而不是我想要的"{deadbeef}"。
所以我的问题是:我必须按照第一个示例通过显式添加{ 和} 来解决这个问题,还是有办法使用复合格式并转义大括号?
另请注意,这也会影响字符串插值,它(毕竟)只是由编译器转换为对string.Format() 的调用。
(这很可能是重复的问题,但到目前为止我一直找不到重复的问题......)
编辑
【问题讨论】:
-
请参阅msdn.microsoft.com/en-us/library/txafckwd(v=vs.110).aspx 中的“转义大括号” - 基本上您的解决方法就是解决方案。
-
这看起来像是
string.Format中的一个错误。 -
@HansKesting 那篇文章实际上是这个问题的答案。如果您将其发布为答案,我会将其标记为正确。
-
我可以看到他们实际上已经将此记录为一项功能,而不是一个错误。不过,它是一个错误,从某种意义上说,如果你必须解释某些东西是如何被破坏的,它并不能使它正确。但是,由于这被记录为表现得像你只需要解决它。如果您遵循解释中的逻辑,那么
"{{{0}}}"也不应该工作,因为0}不是一个有效的参数索引,但由于这工作它是不一致的。 -
基本上我应该使用 RTFM。 :)
标签: c# string.format