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

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

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

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

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

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

作为一个有趣的案例:

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

告诉他们是完全相同的字符串实例(感谢“实习”)。 它们不仅仅是等同的 ; 它们与运行时的字符串实例相同 。 因此,他们不可能 (到运行时)以任何方式不同。

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

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

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

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