11

C# 编译器或 .NET 运行时处理逐字字符串文字与使用转义序列(即性能)的方式有什么区别,还是只是设计时风格的问题?例如:

var pathA = "c:\\somewhere";
var pathB = @"c:\somewhere";

我想他们的编译是一样的,没关系,只是好奇。

4

3 回答 3

19

这里的任何区别都严格限于编译器;IL 和运行时没有逐字与转义的概念 - 它只有字符串

至于选择哪个:哪个更方便;p 如果有不寻常的字符,我几乎总是使用逐字字符串文字,因为这样可以非常轻松且直观地使用多行字符串。

作为一个有趣的案例:

bool areSame = ReferenceEquals("c:\\somewhere", @"c:\somewhere"); // true

这说明它们是完全相同的字符串实例(感谢“实习”)。它们不只是等价的;它们是运行时的相同字符串实例。因此,它们不可能(对于运行时)以任何方式不同。

于 2013-01-29T13:20:33.123 回答
3

它们完全相同。尝试使用反编译器反编译这两个版本。

在代码中编写它时,这只是为了方便开发人员。

于 2013-01-29T13:20:31.700 回答
1

字符串前面的 @ 符号告诉编译器忽略任何嵌入的转义序列。

字符串 "\"" 会产生一个双引号。字符串 "\" 会产生一个反斜杠 字符串 @"\" 会产生两个反斜杠

于 2013-01-29T13:23:11.273 回答