有一种字符串,您可以在其中禁用文字转义字符的处理并按原样打印字符串。这个字符串是什么?用于为字符串添加前缀的符号,以及可能用于?
的符号是吗?
答案 0 :(得分:15)
这是@
字符:@"c:\path"
答案 1 :(得分:8)
它被称为verbatim string literal,并使用@前缀。
没有前缀,它仍然是一个字符串文字 - 它是常规字符串文字。
(有些人错误地认为“字符串文字”这个术语仅适用于逐字字符串文字,但它更为一般。)
逐字字符串文字对以下内容非常有用:
请注意,此仅在编译时有所不同。换句话说,这两个语句完全等效:
string x = "foo\\bar"; // Regular string literal
string x = @"foo\bar"; // Verbatim string literal
Verbatim字符串文字仍然以与常规字符串文字相同的方式实现,仍然引用System.String
等实例。
来自C# 4.0 specification的第2.4.4.5节:
常规字符串文字由用双引号括起来的零个或多个字符组成,如“hello”中所示,并且可以包括简单的转义序列(例如用于制表符的\ t),以及十六进制和Unicode转义序列。 / p>
逐字字符串文字由@字符后跟双引号字符,零个或多个字符以及结束双引号字符组成。一个简单的例子就是@“你好”。在逐字字符串文字中,分隔符之间的字符是逐字解释的,唯一的例外是quote-escape-sequence。特别是,简单转义序列以及十六进制和Unicode转义序列不会在逐字字符串文字中处理。逐字字符串文字可能跨越多行。
请注意,@也可以用作前缀,以允许您将关键字用作标识符:
int class = 10; // Invalid
int @class = 10; // Valid
这很少有用,但如果 使用特定标识符,有时可能需要这样做。 (例如,class
关键字对ASP.NET MVC中的匿名类型属性很有用。)
答案 2 :(得分:5)
@
string sLiteral = @"This will be formatted. Even including
return characters,
and spaces at the start of lines";
答案 3 :(得分:2)
在C#中,您可以使用the @ sign to make a verbatim string literal 除了“之外的所有人都被忽略了。
var literal = @"C:\Test\Test.txt
Newlines are also parsed";
答案 4 :(得分:2)
如果我有这样的字符串:c:\ monkey.txt
我必须像这样逃避斜线:
string s = "c:\\monkey.txt"
注意双斜杠
或者你可以使用'@'符号表示字符串是字面意思:
string s = @"c:\monkey.txt"