49

我对 c# 有点陌生,我被困在这一点上,我有一个常规字符串,我使用了\to escape ",这里的 escape 意味着逃避编译器对 的解释",并"打印在屏幕上,我得到预期的输出——>

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();
    }
}

为什么以上不起作用?

4

3 回答 3

63

使用双引号:

 string s2 = @"This is \t a ""verbatim"" string";
于 2013-06-18T12:34:16.180 回答
14

如果要编写包含双引号的逐字字符串,则必须编写两个双引号。

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

在此处输入图像描述

C# 规范的第 2.4.4.5 节对此进行了介绍:

2.4.4.5 字符串文字

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

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

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

于 2013-06-18T12:33:44.653 回答
4

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

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

当然,您永远不能\t使用此方法添加特殊字符,例如 (tab),因此它仅对简单字符串有用 - 我想我只在处理文件路径时使用它。

于 2013-06-18T12:35:40.627 回答