C# 逐字字符串文字v转义序列
C#编译器或.NET运行时处理逐字逐句字符串文字的方式与使用转义序列(即性能)的方式有什么不同吗?或者这只是设计时风格的问题?例如:C# 逐字字符串文字v转义序列,c#,string,verbatim,C#,String,Verbatim,C#编译器或.NET运行时处理逐字逐句字符串文字的方式与使用转义序列(即性能)的方式有什么不同吗?或者这只是设计时风格的问题?例如: var pathA = "c:\\somewhere"; var pathB = @"c:\somewhere"; 我想它们都是一样的,没关系,只是好奇而已。它们完全一样。尝试使用反编译器反编译这两个版本 在代码中编写代码时,这只是为了方便开发人员。这里的任何差异都严格限于编译器;IL和运行时没有逐字与转义的概念——它只有字符串 至于选择哪一个:以较方便者为准;
var pathA = "c:\\somewhere";
var pathB = @"c:\somewhere";
我想它们都是一样的,没关系,只是好奇而已。它们完全一样。尝试使用反编译器反编译这两个版本
在代码中编写代码时,这只是为了方便开发人员。这里的任何差异都严格限于编译器;IL和运行时没有逐字与转义的概念——它只有字符串 至于选择哪一个:以较方便者为准;如果有不寻常的字符,PI几乎总是使用逐字字符串文字,因为这使得多行字符串非常容易和直观 有趣的是:
bool areSame = ReferenceEquals("c:\\somewhere", @"c:\somewhere"); // true
这说明它们是完全相同的字符串实例(多亏了“interning”)。它们不仅仅是等价物;它们是运行时的同一字符串实例。因此,它们(对于运行时)不可能有任何不同。字符串前面的@符号告诉编译器忽略任何嵌入的 逃逸序列 字符串“\”将产生一个双引号。 字符串“\”将产生一个反斜杠
字符串@“\”将产生两个反斜杠我认为它们是在同一个东西中编译的。从逻辑上讲,为什么它会生成不同的IL?