Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.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);

如何在使用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中的新特性

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}