string.Format
中如何转义大括号?例如:String val = "1,2,3"
String.Format(" foo {{0}}", val);
这个示例不会抛出异常,但输出字符串foo {0}
。
是否有一种方法可以转义这些括号?
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}
$"a = {{ {a} }}"
)。 - Mahmood Dehghanstring v = $" foo {{{t}}}";
。如果您需要转义其他字符而不是大括号,则可以使用$@组合,例如:string v2 = $@"\foo {{{t}}}\";
。 - Nhan是的,在使用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}
String.Format("{0}{1:N}{2}", "{", i, "}") // Evaluates to {24.00}
string.Format("{{{0}}}", i.ToString("N"));
,这可能更易读一些。 - HappyNomad就快完成了!大括号的转义序列是{{
或}}
,所以对于您的示例,您应该使用:
string t = "1, 2, 3";
string v = String.Format(" foo {{{0}}}", t);
您可以使用双开括号和双闭括号,这将仅在您的页面上显示一个括号。
使用字符串插值和转义花括号会带来有趣的挑战。你需要使用四重花括号来转义字符串插值解析和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>
[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);
}
我的目标:
我需要将值"{CR}{LF}"
分配给一个名为delimiter
的字符串变量。
C#代码:
string delimiter= "{{CR}}{{LF}}";
{
,使用一个额外的花括号{{
。对于右花括号}
,使用一个额外的花括号}}
。或者您可以使用 C# 字符串插值,像这样(C# 6.0 中可用的特性):
var value = "1, 2, 3";
var output = $" foo {{{value}}}";
var outVal = $" foo {"{"}{inVal}{"}"} --- {"{"}也像这样{"}"}"
我如何在字符串格式中输出花括号?
转义的花括号是否有任何我需要注意的奇怪行为?
我如何使用字符串格式化来输出类似于"{42.00}"这样的内容? - gerryLowry