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