C# 如何在.NET中转义格式字符串中的大括号(花括号)
如何在使用string.Format时转义括号 例如:C# 如何在.NET中转义格式字符串中的大括号(花括号),c#,.net,string,parsing,formatting,C#,.net,String,Parsing,Formatting,如何在使用string.Format时转义括号 例如: String val = "1,2,3" String.Format(" foo {{0}}", val); 此示例不会引发异常,但会输出字符串foo{0} 有没有办法避开括号?要输出foo{1,2,3},必须执行以下操作: string t = "1, 2, 3"; string v = String.Format(" foo {{{0}}}", t);
String val = "1,2,3"
String.Format(" foo {{0}}", val);
此示例不会引发异常,但会输出字符串foo{0}
有没有办法避开括号?要输出foo{1,2,3},必须执行以下操作:
string t = "1, 2, 3";
string v = String.Format(" foo {{{0}}}", t);
要输出一个{您使用{},要输出一个}您使用}
或者现在,您也可以像这样使用C字符串插值,这是C 6.0中提供的一个功能
转义括号:字符串插值$。这是C 6.0中的新特性
var inVal = "1, 2, 3";
var outVal = $" foo {{{inVal}}}";
// The output will be: foo {1, 2, 3}
快到了!大括号的转义序列是{{或}},因此在您的示例中,您将使用:
string t = "1, 2, 3";
string v = String.Format(" foo {{{0}}}", t);
您可以使用双开括号和双闭括号,它们在页面上只显示一个括号 是的,要以字符串形式输出{。格式,您必须像这样转义它:{{ 下面将输出foo{1,2,3} 但您必须了解C中的一个设计缺陷,即通过执行上述逻辑,您将假定以下代码将打印{24.00}:
int i = 24;
string str = String.Format("{{{0:N}}}", i); // Gives '{N}' instead of {24.00}
但这会打印{N}。这是因为C解析转义序列和格式字符的方式。要在上述情况下获得所需的值,您必须使用以下方法:
String.Format("{0}{1:N}{2}", "{", i, "}") // Evaluates to {24.00}
参考文章
我来这里是为了寻找如何在不序列化C中的类/对象的情况下构建临时JSON字符串。换句话说,如何在使用带“@”前缀的双引号字符串时转义大括号和引号,如
var json = $@"{{""name"":""{name}""}}";
转义花括号和使用字符串插值是一个有趣的挑战。您需要使用四个括号来转义字符串插值解析和string.format解析
转义括号:字符串插值$和String.Format
字符串localVar=dynamic;
string templateString=$@{0}这是我的{localVar}模板,使用{{{{{{custom tag}}};
字符串结果=string.FormattemplateString,字符串插值;
//输出:字符串插值这是我使用{custom tag}的动态模板
也可以使用C字符串插值,如C 6.0中提供的此功能:
var value = "1, 2, 3";
var output = $" foo {{{value}}}";
var inVal = "1, 2, 3";
var outVal = $" foo {{{inVal}}}";
// The output will be: foo {1, 2, 3}
我的目标:
我需要将值{CR}{LF}分配给字符串变量分隔符
C代码:
注意:要转义特殊字符,通常必须使用\。要打开花括号{,请使用一个额外字符,如{{。要关闭花括号},请使用一个额外字符}。转义括号:字符串插值$:
现在,您还可以使用C字符串插值,如C 6.0中提供的此功能:
var value = "1, 2, 3";
var output = $" foo {{{value}}}";
var inVal = "1, 2, 3";
var outVal = $" foo {{{inVal}}}";
// The output will be: foo {1, 2, 3}
{{被视为格式字符串中的转义括号字符。但是如果你想给字符串说明符添加值格式,你还需要阅读下面Guru Kara的答案。阅读官方文档中的转义括号一节。它在新的C 6字符串插值$a={{{{a}}中也起作用更具体地说,在c6字符串插值方法中,在卷曲上加倍工作,就像字符串v=$foo{{{{{{t}}};。如果要转义的字符不是卷曲字符,可以使用$@combo string v2=$@\foo{{{{{t}}}\;MSDN字符串格式常见问题解答:如何以字符串格式写出花括号?转义的花括号是否有任何需要注意的奇怪行为?如何使用字符串格式写出类似{42.00}的内容?不幸的是,上面的MSDN链接已断开。目前,正确的链接似乎位于底部的QA部分,或者在页面上搜索escape。如果我遇到该错误,我会编写string.Format{{{{0}},i.toString;对某些人来说可能更具可读性。@很高兴这样做,但您会发现自己指定了两次FormatProvider,可能会指定不同的格式提供程序,或者遗漏一个。这似乎是剽窃版本和/或包含了原始修订版的拼写错误。
var inVal = "1, 2, 3";
var outVal = $" foo {{{inVal}}}";
// The output will be: foo {1, 2, 3}