我怎么逃避“逐字串?

时间:2013-06-18 12:32:39

标签: c# .net string escaping verbatim-string

我对c#有点新,而且我在这一点上陷入困​​境, 我有一个常规字符串,我使用\来转义",这里的转义意味着逃避编译器对"的解释,并在"上打印class Program { static void Main(string[] args) { string s1 = "This is a \"regular\" string"; System.Console.WriteLine(s1); System.Console.Read(); } } 屏幕,我得到预期的输出 - >

"

O / P - >这是一个“常规”字符串

现在,我有一个逐字字符串,我试图以与上面相同的方式使用\逃避class Program { static void Main(string[] args) { string s2 = @"This is \t a \"verbatim\" string";//this would escape \t System.Console.WriteLine(s2); System.Console.Read(); } } ..-->

{{1}}

为什么以上不起作用?

3 个答案:

答案 0 :(得分:34)

使用双引号:

 string s2 = @"This is \t a ""verbatim"" string";

答案 1 :(得分:8)

如果你想写一个包含双引号的逐字字符串,你必须写两个双引号。

string s2 = @"This is \t a ""verbatim"" string";

enter image description here

这涵盖在section 2.4.4.5 of the C# specification

  

2.4.4.5字符串文字

     

C#支持两种形式的字符串文字:常规字符串文字和逐字字符串文字。

     

常规字符串文字由用双引号括起来的零个或多个字符组成,如“hello”中所示,并且可以包括简单转义序列(例如用于制表符的\ t)和十六进制和Unicode转义序列。

     

逐字字符串文字由@字符后跟双引号字符,零个或多个字符以及结束双引号字符组成。一个简单的例子就是@“你好”。在逐字字符串文字中,分隔符之间的字符是逐字解释的,唯一的例外是quote-escape-sequence。特别是,简单的转义序列和十六进制和Unicode转义序列不会在逐字字符串文字中处理。逐字字符串文字可以跨越多行。

答案 2 :(得分:3)

在逐字字符串中,反斜杠被视为标准字符,而不是转义字符。唯一需要转义的字符是引号,您可以使用相同的字符转义:

string s2 = @"This is \t a ""verbatim"" string";

当然你永远不能使用这个方法添加像\t(tab)这样的特殊字符,所以它只对简单的字符串很有用 - 我想我在使用文件路径时只会使用它。