逐字字符串文字v转义序列
C#编译器或.NET运行时处理逐字字符串文字与使用转义序列(即性能)的方式有什么不同,还是仅仅是设计时间风格的问题? 例如:
var pathA = "c:\\somewhere"; var pathB = @"c:\somewhere";
我认为它们编译相同而且没关系,但只是好奇。
这里的任何差异都严格限于编译器; IL和运行时没有逐字逐句转义的概念 – 它只有字符串 。
至于选择哪个:哪个更方便;如果有不寻常的字符,我几乎总是使用逐字字符串文字,因为这样可以非常容易和直观地使用多行字符串。
作为一个有趣的案例:
bool areSame = ReferenceEquals("c:\\somewhere", @"c:\somewhere"); // true
告诉他们是完全相同的字符串实例(感谢“实习”)。 它们不仅仅是等同的 ; 它们与运行时的字符串实例相同 。 因此,他们不可能 (到运行时)以任何方式不同。
它们完全一样。 尝试用反编译器反编译这两个版本。
开发人员在代码中编写代码时,这只是一个方便的问题。
字符串前面的@符号告诉编译器忽略任何嵌入的转义序列。
字符串“\”“将产生一个双引号。字符串”\“将产生一个反斜杠字符串@”\“将产生两个反斜杠