当前位置:  开发笔记 > 编程语言 > 正文

如何在.NET中的格式字符串中转义大括号(花括号)

如何解决《如何在.NET中的格式字符串中转义大括号(花括号)》经验,为你挑选了7个好方法。

如何在使用中转义括号string.Format.例如:

String val = "1,2,3"
String.Format(" foo {{0}}", val); 

此示例不会抛出异常,但会输出字符串 foo {0}

有没有办法摆脱括号?



1> Jorge Ferrei..:

要输出foo {1, 2, 3}你必须做的事情如下:

string t = "1, 2, 3";
string v = String.Format(" foo {{{0}}}", t);

输出{您使用{{并输出}您使用的}}.


"{{"被视为格式字符串中的转义括号字符.
它也用于新的C#6字符串插值(`$"a = {{{a}}}"`)
但是如果你想为你的字符串说明符添加值格式,你还需要阅读下面的Guru Kara的答案.

2> Guru Kara..:

是输出{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}

但这打印{N}.这是因为C#解析转义序列和格式化字符的方式.要在上述情况下获得所需的值,您必须使用它.

String.Format("{0}{1:N}{2}", "{", i, "}") //evaluates to {24.00}

参考文章 String.Format gottach和 String Formatting FAQ


如果我遇到那个bug,我会写`string.Format("{{{0}}}",i.ToString("N"));`这对某些人来说可能更具可读性.

3> Wolfwyrd..:

差不多了!为支柱的转义序列{{}}使你的例子中,你可以使用:

string t = "1, 2, 3";
string v = String.Format(" foo {{{0}}}", t);



4> 小智..:

您可以使用双开括号和双关闭括号,它们只会在您的页面上显示一个括号.



5> SliverNinja ..:

转义大括号并使用字符串插值是一个有趣的挑战.您需要使用四重括号来转义字符串插值解析和string.format解析.

转义括号:字符串插值$("")和String.Format

string localVar = "dynamic";
string templateString = $@"

{0}

this is my {localVar} template using a {{{{custom tag}}}}
"; string result = string.Format(templateString, "String Interpolation"); // OUTPUT:

String Interpolation

this is my dynamic template using a {custom tag}



6> Adam Cox..:

来到这里寻求如何在C#中临时构建json字符串(不序列化类/对象)。换句话说,如何在C#和“ 逐字字符串文字 ”(带'@'前缀的双引号字符串)中使用插值字符串时转义括号和引号,例如...

var json = $@"{{""name"":""{name}""}}";



7> pomber..:
[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);
}

推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有