提问人:Pop Catalin 提问时间:9/18/2008 最后编辑:Peter MortensenPop Catalin 更新时间:11/15/2023 访问量:367242
如何在.NET中的格式字符串中转义大括号(大括号)
How to escape braces (curly brackets) in a format string in .NET
问:
括号在使用中如何转义?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);
要输出 a you use 和 输出 a you use .{
{{
}
}}
或者现在,您还可以像这样使用 C# 字符串插值(C# 6.0 中提供的一项功能)
转义括号:字符串插值 $(“”)。它是 C# 6.0 中的新功能。
var inVal = "1, 2, 3";
var outVal = $" foo {{{inVal}}}";
// The output will be: foo {1, 2, 3}
评论
$"a = {{ {a} }}"
)
string v = $" foo {{{t}}}";
string v2 = $@"\foo {{{t}}}\";
快到了!大括号的转义序列是左右,对于您的示例,您将使用:{{
}}
string t = "1, 2, 3";
string v = String.Format(" foo {{{0}}}", t);
您可以使用双左括号和双右括号,它们只会在您的页面上显示一个括号。
是的,要输出,您必须像这样转义它:{
string.Format
{{
所以下面将输出."foo {1,2,3}"
String val = "1,2,3";
String.Format(" foo {{{0}}}", val);
但是你必须知道 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( "{{{0}}}", i.ToString("N") );
[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);
}
我来这里是为了寻找如何在 C# 中临时构建 JSON 字符串(无需序列化类/对象)。换句话说,如何在 C# 中使用插值字符串和“逐字字符串文字”(带有“@”前缀的双引号字符串)时转义大括号和引号,例如......
var json = $@"{{""name"":""{name}""}}";
转义大括号并使用字符串插值是一个有趣的挑战。您需要使用四括号来转义字符串插值解析和解析。string.format
转义括号:字符串插值 $(“”) 和 String.Format
string localVar = "dynamic";
string templateString = $@"<h2>{0}</h2><div>this is my {localVar} template using a {{{{custom tag}}}}</div>";
string result = string.Format(templateString, "String Interpolation");
// OUTPUT: <h2>String Interpolation</h2><div>this is my dynamic template using a {custom tag}</div>
或者,您可以像这样使用 C# 字符串插值(C# 6.0 中提供的功能):
var value = "1, 2, 3";
var output = $" foo {{{value}}}";
我的目标:
我需要将值分配给变量。"{CR}{LF}"
string
delimiter
C# 代码:
string delimiter= "{{CR}}{{LF}}";
注意:要正常转义特殊字符,您必须使用 \。要打开大括号,请使用一个额外的括号,例如 .要关闭大括号,请使用一个额外的括号。{
{{
}
}}
转义括号:字符串插值 $(“”):
现在,您还可以像这样使用 C# 字符串插值(C# 6.0 中提供的功能):
var inVal = "1, 2, 3";
var outVal = $" foo {{{inVal}}}";
// The output will be: foo {1, 2, 3}
评论
你也可以这样使用。var outVal = $" foo {"{"}{inVal}{"}"} --- {"{"}Also Like This{"}"}"
我想在字符串插值时逃脱{{Id}}
这对我有用:
string url = $"/Details/{{{{Id}}}}";
输出:
/Details/{{Id}}
我想把我的两分钱放进去。对于原始字符串文字(以 3 个双引号开头),上述答案将不起作用,但您可以反其道而行之:您可以通过在开头添加来更改要在文本中使用的大括号数。 表示您需要应用模板值。要回答 OP,以下方法将起作用:$
$$""" """
{{
var formatted = $$"""foo {{{val}}}""";
输出将是:
foo {1, 2, 3}
下一个:确定字符串是否为数字
评论