逐字字符串文字v转义序列

时间:2013-01-29 13:18:12

标签: c# string verbatim

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

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

我认为它们的编译方式相同而且没关系,但只是好奇。

3 个答案:

答案 0 :(得分:19)

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

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

作为一个有趣的案例:

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

告诉他们正好相同的字符串实例(感谢“interning”)。它们不仅仅是等同于;它们与运行时相同的字符串实例。因此不可能它们(在运行时)可能以任何方式不同。

答案 1 :(得分:3)

它们完全一样。尝试用反编译器反编译这两个版本。

开发人员在代码中编写代码时,这只是一个方便的问题。

答案 2 :(得分:1)

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

string“\”“会产生一个双引号。 字符串“\”将产生一个反斜杠 string @“\”会产生两个反斜杠