逐字字符串v转义序列逐字字符串v转义序列(Verbatim string literals v es

2019-05-12 09:56发布

有没有在C#编译器或.NET运行时如何处理逐字字符串与使用转义序列(即性能)任何区别,或只是设计时间样式的事? 例如:

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

我可以想象他们被编译相同的,也没关系,但只是好奇。

Answer 1:

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

至于可供选择:取其更方便; p我几乎总是使用逐字字符串,如果有特殊字符,作为能够多行字符串非常容易和直观。

作为一个有趣的例子:

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

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



Answer 2:

他们是完全一样的。 尝试反编译两个版本反编译。

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



Answer 3:

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

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



文章来源: Verbatim string literals v escape sequences