我对c#有点新,而且我在这一点上陷入困境,
我有一个常规字符串,我使用\
来转义"
,这里的转义意味着逃避编译器对"
的解释,并在"
上打印class Program
{
static void Main(string[] args)
{
string s1 = "This is a \"regular\" string";
System.Console.WriteLine(s1);
System.Console.Read();
}
}
屏幕,我得到预期的输出 - >
"
现在,我有一个逐字字符串,我试图以与上面相同的方式使用\
逃避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}}
为什么以上不起作用?
答案 0 :(得分:34)
使用双引号:
string s2 = @"This is \t a ""verbatim"" string";
答案 1 :(得分:8)
如果你想写一个包含双引号的逐字字符串,你必须写两个双引号。
string s2 = @"This is \t a ""verbatim"" string";
这涵盖在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)这样的特殊字符,所以它只对简单的字符串很有用 - 我想我在使用文件路径时只会使用它。