Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 逐字字符串文字v转义序列_C#_String_Verbatim - Fatal编程技术网

C# 逐字字符串文字v转义序列

C# 逐字字符串文字v转义序列,c#,string,verbatim,C#,String,Verbatim,C#编译器或.NET运行时处理逐字逐句字符串文字的方式与使用转义序列(即性能)的方式有什么不同吗?或者这只是设计时风格的问题?例如: var pathA = "c:\\somewhere"; var pathB = @"c:\somewhere"; 我想它们都是一样的,没关系,只是好奇而已。它们完全一样。尝试使用反编译器反编译这两个版本 在代码中编写代码时,这只是为了方便开发人员。这里的任何差异都严格限于编译器;IL和运行时没有逐字与转义的概念——它只有字符串 至于选择哪一个:以较方便者为准;

C#编译器或.NET运行时处理逐字逐句字符串文字的方式与使用转义序列(即性能)的方式有什么不同吗?或者这只是设计时风格的问题?例如:

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

我想它们都是一样的,没关系,只是好奇而已。

它们完全一样。尝试使用反编译器反编译这两个版本


在代码中编写代码时,这只是为了方便开发人员。

这里的任何差异都严格限于编译器;IL和运行时没有逐字与转义的概念——它只有字符串

至于选择哪一个:以较方便者为准;如果有不寻常的字符,PI几乎总是使用逐字字符串文字,因为这使得多行字符串非常容易和直观

有趣的是:

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

这说明它们是完全相同的字符串实例(多亏了“interning”)。它们不仅仅是等价物;它们是运行时的同一字符串实例。因此,它们(对于运行时)不可能有任何不同。

字符串前面的@符号告诉编译器忽略任何嵌入的 逃逸序列

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

我认为它们是在同一个东西中编译的。从逻辑上讲,为什么它会生成不同的IL?