使用时如何逃脱括号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}
。
有没有办法逃脱括号?
Answers:
为了输出,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}}}";
//Output will be: foo {1, 2, 3}
$"a = {{ {a} }}"
)
string v = $" foo {{{t}}}";
。如果您还有其他要转义的字符,可以使用$ @组合string v2 = $@"\foo {{{t}}}\";
是的,要输出{
,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获取和 字符串格式常见问题解答
string.Format( "{{{0}}}", i.ToString("N") );
一些可能更易读的错误。
转义大括号并使用字符串插值带来了一个有趣的挑战。您需要使用四方括号来进行字符串插值解析和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);
}
转义括号:字符串插值$(“”):
现在,您还可以像这样使用c#字符串插值(C#6.0中提供的功能)
var inVal= "1, 2, 3";
var outVal= $" foo {{{inVal}}}";
//Output will be: foo {1, 2, 3}