如何以逐字字符串的forms逃脱?
我对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 \ta \"verbatim\" string";//this would escape \t System.Console.WriteLine(s2); System.Console.Read(); } }
为什么以上不起作用?
使用双引号:
string s2 = @"This is \ta ""verbatim"" string";
如果要编写包含双引号的逐字字符串,则必须编写两个双引号。
string s2 = @"This is \ta ""verbatim"" string";
这在C#规范的2.4.4.5节中有所介绍:
2.4.4.5字符串文字
C#支持两种forms的字符串文字:常规字符串文字和逐字字符串文字。
常规字符串文字由用双引号括起来的零个或多个字符组成,如“hello”中所示,并且可以包括简单转义序列(例如用于制表符的\ t)和hex和Unicode转义序列。
逐字字符串文字由@字符后跟双引号字符,零个或多个字符以及结束双引号字符组成。 一个简单的例子就是@“你好”。 在逐字字符串文字中,分隔符之间的字符是逐字解释的,唯一的例外是quote-escape-sequence。 特别是,简单转义序列和hex和Unicode转义序列不会在逐字字符串文字中处理。 逐字字符串文字可以跨越多行。
在Verbatim字符串中,反斜杠被视为标准字符,而不是转义字符。 需要转义的唯一字符是引号,您可以使用相同的字符转义:
string s2 = @"This is \ta ""verbatim"" string";
当然你永远不能使用这个方法添加像\t
(tab)这样的特殊字符,所以它只对简单的字符串有用 – 我想我在处理文件路径时只会使用它。