2010-09-30 187 views
7

存在一种字符串类型,用于禁用字面转义字符的处理并按原样打印字符串。这是什么字符串?用于字符串前缀的符号,以及可能的用途?转义字符

是\?

回答

15

这是@字符:@"c:\path"

它被称为一个verbatim string literal

+0

谢谢你们。我给每个人点数,但我必须选择最好的答案,这是第一个答复。再次感谢你的帮助。 – Yves 2010-09-30 16:09:56

+0

在这种情况下,@Kombucha,一定要将其标记为接受的答案。 :) – 2010-09-30 16:15:15

+0

我做了:)我需要等8分钟才能检查复选标记。我只是做:) – Yves 2010-09-30 16:17:45

5

@

string sLiteral = @"This will be formatted. Even including 
return characters, 
    and spaces at the start of lines"; 
8

它被称为verbatim string literal,并使用@前缀

没有前缀,它仍然是一个字符串。 - 它是一个常规字符串文字

(有些人误以为术语“字符串文字”只适用于逐字字符串,但比这更普遍)

逐字字符串是有用的:

  • 多行字符串
  • 字符串这自然包含反斜杠(例如作为Windows路径和正则表达式)

请注意,此只有在编译时有所不同。换句话说,这两个语句是完全等效

string x = "foo\\bar"; // Regular string literal 
string x = @"foo\bar"; // Verbatim string literal 

逐字字符串以同样的方式作为常规字符串文字还是实习,还是指的System.String

情况下,从第2.4节的C# 4.0 specification .4.5:

规则字符串由包含在双引号零个或多个字符,如“你好”,并且可以包括简单的转义序列(例如作为制表符的\ t),以及十六进制和Unicode转义序列。

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

注意@也可以用来作为前缀,以使您可以使用关键字作为标识符:

int class = 10; // Invalid 
int @class = 10; // Valid 

这是很少有用,但有时需要,如果你使用特定标识符。 (该class关键字可以是用于在ASP.NET MVC匿名类型属性是有用的,例如。)

2

如果我有一个字符串作为这样:C:\ monkey.txt

我将不得不逃脱斜杠是这样的:
string s = "c:\\monkey.txt"

通知双斜杠

或者你可以使用“@”符号,表示该字符串是从字面上理解:
string s = @"c:\monkey.txt"