我正在尝试格式化文本,以便为模板提供一些RFT文本。
我的字符串使用stringformater声明为:
var fullTitleString = string.Format(
CultureInfo.CurrentCulture,
"{{\\Test",
title,
filterName);
但是我继续获得一个字符串" {\ Test"。使用单个反斜杠导致错误,它不理解\ T转义字符。
做@" {{\ Test"也产生了" {\ Test"。我查看了MSDN文档和其他问题,他们告诉我们使用另一个反斜杠作为逃避字符,但它似乎不起作用。
答案 0 :(得分:4)
这里有两个逃避的因素:
<强> 1。转义字符串文字
在c#字符串中,反斜杠(\
)用作特殊字符,需要由另一个\
转义。因此,如果结果字符串看起来像\\uncpath\folder
,则字符串文字应为var s = "\\\\uncpath\\folder"
。
<强> 2。转义格式字符串
string.Format
使用花括号作为占位符,因此您需要使用额外的大括号来转义它们。
所以,让我们说你有
string title = "myTitle";
string filterName = "filter";
然后
string.Format("{{\\Test {0}, {1}}}", title, filterName);
结果
{\Test myTitle, filter}
如果你想在开头有两个花括号,你需要在格式字符串中加上四个:
string.Format("{{{{\\Test {0}, {1}}}", title, filterName);
结果
{{\Test myTitle, filter}
如果你提供了一个明确的例子,我可能会告诉你正确的格式字符串。
旁注:在C#6中,最后一个示例也可以是$"{{{{\\Test {title}, {filterName}}}"
(使用字符串插值而不显式调用string.Format
)
注意: Visual Studio调试器始终显示未转义的字符串文字。因此,如果您声明一个类似string s = "\\"
的字符串,您将在调试器窗口中看到两个反斜杠,但如果Console.WriteLine(s)
只有一个反斜杠将被写入控制台。