Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在.NET中转义格式字符串中的大括号(花括号)_C#_.net_String_Parsing_Formatting - Fatal编程技术网

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}}”
。如果要转义的字符不是卷曲字符,可以使用$@combo
string 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}