在C#逃避花括号和后面的反斜杠

时间:2016-01-28 11:31:56

标签: c# .net escaping

我正在尝试格式化文本,以便为模板提供一些RFT文本。

我的字符串使用stringformater声明为:

var fullTitleString = string.Format(
            CultureInfo.CurrentCulture,
            "{{\\Test",
            title,
            filterName);

但是我继续获得一个字符串" {\ Test"。使用单个反斜杠导致错误,它不理解\ T转义字符。

做@" {{\ Test"也产生了" {\ Test"。我查看了MSDN文档和其他问题,他们告诉我们使用另一个反斜杠作为逃避字符,但它似乎不起作用。

1 个答案:

答案 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)只有一个反斜杠将被写入控制台。