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