转义字符

问题描述 投票:0回答:5

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

\
吗?

c#
5个回答
15
投票

它是

@
字符:
@"c:\path"

它被称为逐字字符串文字


8
投票

它称为 逐字字符串文字,并使用 @ 前缀。

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

(有些人错误地认为术语“字符串文字”仅适用于逐字字符串文字,但它比这更普遍。)

逐字字符串文字可用于:

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

请注意,这在编译时会产生影响。换句话说,这两个语句完全等价

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

逐字字符串文字仍然以与常规字符串文字相同的方式进行保留,仍然引用

System.String
等的实例。

摘自 C# 4.0 规范第 2.4.4.5 节:

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

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

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

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

这很少有用,但如果您使用特定标识符,有时可能需要这样做。 (例如,

class
关键字对于 ASP.NET MVC 中的匿名类型属性很有用。)


5
投票

@

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

2
投票

如果我有这样的字符串:c:\monkey.txt

我必须像这样转义斜杠:

string s = "c:\\monkey.txt"

注意双斜线

或者,您可以使用“@”符号来指示该字符串要按字面意思理解:

string s = @"c:\monkey.txt"


2
投票

在 C# 中,您可以使用 @ 符号来生成逐字字符串文字
除了 \" 之外的所有内容都将被忽略。

 var literal = @"C:\Test\Test.txt
 Newlines are also parsed";
© www.soinside.com 2019 - 2024. All rights reserved.