C# 如何在.NET中转义格式字符串中的大括号(花括号)
如何在使用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); 要输出{您使用{,要输出}您使用} 或者现在,您也可以像这样使用c#字符串插值(c#
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);
要输出{
您使用{
,要输出}
您使用}
或者现在,您也可以像这样使用c#字符串插值(c#6.0中提供的功能)
转义括号:字符串插值$(“”)。这是C#6.0中的新特性
快到了!大括号的转义序列是
{{
或}
,因此在您的示例中,您可以使用:
string t = "1, 2, 3";
string v = String.Format(" foo {{{0}}}", t);
您可以使用双开括号和双闭括号,它们在页面上只显示一个括号 Yes以
string.Format
格式输出{
,您必须像这样转义{
那么这个
String val = "1,2,3";
String.Format(" foo {{{0}}}", val);
将输出“foo{1,2,3}”
但是你必须知道C#中的一个设计缺陷,也就是说,按照上面的逻辑,你会假设下面的代码将打印{24.00}
int i = 24;
string str = String.Format("{{{0:N}}}", i); //gives '{N}' instead of {24.00}
这是因为C#解析转义序列和格式化字符的方式。
要在上述情况下获得所需的值,您必须使用此选项
String.Format("{0}{1:N}{2}", "{", i, "}") //evaluates to {24.00}
参考文章
和
来到这里是为了研究如何在C#中构建特别的json字符串(不序列化类/对象)。换句话说,如何在使用and“”时转义大括号和引号(双引号字符串,前缀为“@”),比如
转义花括号和使用字符串插值是一个有趣的挑战。您需要使用四个括号来转义字符串插值解析和
字符串格式
解析
转义括号:字符串插值$(“”)和String.Format
string localVar=“dynamic”;
string templateString=$@“{0}这是我的{localVar}模板,使用{{{{{{{custom tag}}}”;
字符串结果=string.Format(templateString,“字符串插值”);
//输出:字符串插值这是我使用{custom tag}的动态模板
或者您可以像这样使用c#字符串插值(c#6.0中提供的功能)
我的目标:
string delimiter= "{{CR}}{{LF}}";
我需要将值“{CR}{LF}”
分配给字符串
变量分隔符
代码c:
string delimiter= "{{CR}}{{LF}}";
注意:要转义通常必须使用的特殊字符。对于开始的花括号{,请使用一个额外的字符,如{{。对于结束的花括号},请使用一个额外的}。转义括号:字符串插值$(“”):
string delimiter= "{{CR}}{{LF}}";
现在,您也可以像这样使用c#字符串插值(c#6.0中提供的功能)
“{”被视为格式字符串中的转义括号字符。但是如果你想在字符串说明符中添加值格式,你还需要阅读下面Guru Kara的答案。阅读官方文档中的转义括号部分。它也在新的C#6字符串插值(
$“a={{{a}}}}
)更具体地说,在C#6字符串插值方式上,加倍卷曲的工作方式是这样的:string v=$“foo{{{{{t}}”
。如果要转义的字符不是卷曲字符,可以使用$@combostring v2=$@“\foo{{{t}}”
MSDN字符串格式常见问题解答:如何以字符串格式写出花括号?转义的花括号是否有任何需要注意的奇怪行为?如何使用字符串格式写出类似“{42.00}”的内容?不幸的是,上面的MSDN链接已断开。目前,正确的链接似乎是(请参阅底部的QA部分,或在页面上搜索“escape”)。如果我遇到该错误,我会编写string.Format(“{{{0}}}”),I.ToString(“N”);
,这对某些人来说可能更易读。@可能会很高兴,但您会发现自己指定了两次FormatProvider,可能会指定不同的,或者错过一个。
var value = "1, 2, 3";
var output = $" foo {{{value}}}";
string delimiter= "{{CR}}{{LF}}";
var inVal= "1, 2, 3";
var outVal= $" foo {{{inVal}}}";
//Output will be: foo {1, 2, 3}