How to escape braces (curly brackets) in a format string in .NET
如何在使用string.Format时转义括号。例如:
1 2
| String val ="1,2,3"
String.Format(" foo {{0}}", val); |
此示例不引发异常,但输出字符串foo {0} 有没有办法摆脱括号?
要输出foo {1, 2, 3},必须执行以下操作:
1 2
| string t ="1, 2, 3";
string v = String.Format(" foo {{{0}}}", t); |
要输出{,使用{{,要输出},使用}}。
是的,要在string.Format中输出{,你必须像这个{{那样避开它。 所以这个
1 2
| String val ="1,2,3";
String.Format(" foo {{{0}}}", val); |
将输出"foo {1,2,3}"。 但是您必须了解C中的一个设计错误,即通过以上逻辑,您可以假定下面的代码将打印24.00
1 2
| int i = 24;
string str = String.Format("{{{0:N}}}", i); //gives '{N}' instead of {24.00} |
但这张照片是n。这是因为C解析转义序列和格式化字符的方式。要在上述情况下获得所需的值,您必须使用它。
1
| String.Format("{0}{1:N}{2}","{", i,"}") //evaluates to {24.00} |
参考文献string.format gottach和字符串格式常见问题解答
快到了!大括号的转义序列是{{或}},因此在您的示例中,您将使用:
1 2
| string t ="1, 2, 3";
string v = String.Format(" foo {{{0}}}", t); |
您可以使用双左括号和双右括号,它们只会在您的页面上显示一个括号。
摆脱花括号和使用字符串插值使一个有趣的挑战。您需要使用四个括号来转义字符串插值解析和string.Format解析。 转义括号:字符串插值$(")和字符串.format
1 2 3 4 5
| string localVar ="dynamic";
string templateString = $@"{0}this is my {localVar} template using a {{{{custom tag}}}}";
string result = string.Format(templateString,"String Interpolation");
// OUTPUT: String Interpolationthis is my dynamic template using a {custom tag} |
这里是为了寻找如何在C_中特别构建JSON字符串(而不序列化类/对象)。换句话说,当使用C和"逐字字符串文本"(前缀为"@"的双引号字符串)中的内插字符串时,如何转义大括号和引号,例如…
1
| var json = $@"{{""name"":""{name}""}}"; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| [TestMethod]
public void BraceEscapingTest()
{
var result = String.Format("Foo {{0}}","1,2,3"); //"1,2,3" is not parsed
Assert.AreEqual("Foo {0}", result);
result = String.Format("Foo {{{0}}}","1,2,3");
Assert.AreEqual("Foo {1,2,3}", result);
result = String.Format("Foo {0} {{bar}}","1,2,3");
Assert.AreEqual("Foo 1,2,3 {bar}", result);
result = String.Format("{{{0:N}}}", 24); //24 is not parsed, see @Guru Kara answer
Assert.AreEqual("{N}", result);
result = String.Format("{0}{1:N}{2}","{", 24,"}");
Assert.AreEqual("{24.00}", result);
result = String.Format("{{{0}}}", 24.ToString("N"));
Assert.AreEqual("{24.00}", result);
} |
或者您可以使用这样的C字符串插值(C 6.0中提供的功能)
1 2
| var value ="1, 2, 3";
var output = $" foo {{{value}}}"; |
我的目标是: 我需要把值"{CR}{LF}"分配给一个string变量delimiter。 C代码:
1
| string delimiter="{{CR}}{{LF}}"; |
注意:要正常转义特殊字符,必须使用。如果要打开花括号,请额外使用一个类似的括号。要关闭花括号,请额外使用一个。
|