在 C# 上,转义大括号和后面的反斜杠

本文关键字:转义 | 更新日期: 2023-09-27 18:32:12

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

我的字符串使用字符串格式化器声明为:

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

但是我一直获得一个字符串作为"{''Test"。使用单个反斜杠会导致错误,因为它无法理解 ''T 转义字符。

执行 @"{{''Test" 也会生成 "{''Test"。我已经查看了MSDN文档和其他问题,他们告诉使用另一个反斜杠作为转义字符,但它似乎不起作用。

在 C# 上,转义大括号和后面的反斜杠

这里有两个逃生的宝贝:

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)则只会将一个反斜杠写入控制台。