空字符串文字

Fir*_*ess 9 c# string

我在代码审查期间遇到了一些代码,其中一位老同事做了以下事情:

const string replacement = @""; 
Run Code Online (Sandbox Code Playgroud)

此字符串在正则表达式中用作替代匹配的内容.我的问题是将@ literal符号​​添加到空字符串的开头是什么意思.不应该有任何字面解释.

@"";和 之间的影响会有什么不同"";吗?

Jon*_*nna 9

此字符串用于正则表达式

正则表达式会大量使用该\字符.例如,下面是一个正则表达式匹配precentages来自0100总是有四个小数位:

^(100\.0000|[1-9]?\d\.\d{4})$
Run Code Online (Sandbox Code Playgroud)

由于\拥有较为常见的C#语法进行转义\\@""形式允许正则表达式更容易阅读,比较:

"^(100\\.0000|[1-9]?\\d\\.\\d{4})$"
@"^(100\.0000|[1-9]?\d\.\d{4})$"
Run Code Online (Sandbox Code Playgroud)

因此,人们经常养成@""在使用正则表达式时使用表单的习惯,即使在没有区别的情况下也是如此.首先,如果它们后来改变为确实有所改变的东西,则只需要更改表达式,而不是字符串本身的代码.

我建议这可能是你的同事使用@""而不是""在这种特殊情况下使用的原因.生成的.NET是相同的,但它们习惯于使用@""正则表达式.


Bas*_*Bas 5

查看MSDN文档中的字符串文字.对于空字符串,它没有任何效果,但它会更改某些字符转义序列的行为以及换行符处理.从MSDN站点获取的示例:

string a = "hello, world";                  // hello, world
string b = @"hello, world";               // hello, world
string c = "hello \t world";               // hello     world
string d = @"hello \t world";               // hello \t world
string e = "Joe said \"Hello\" to me";      // Joe said "Hello" to me
string f = @"Joe said ""Hello"" to me";   // Joe said "Hello" to me
string g = "\\\\server\\share\\file.txt";   // \\server\share\file.txt
string h = @"\\server\share\file.txt";      // \\server\share\file.txt
string i = "one\r\ntwo\r\nthree";
string j = @"one
two
three";
Run Code Online (Sandbox Code Playgroud)


And*_*ker 4

下列:

string a = @"";
string b = "";
Run Code Online (Sandbox Code Playgroud)

生成此 IL:

IL_0001:  ldstr       ""
IL_0006:  stloc.0     // a
IL_0007:  ldstr       ""
IL_000C:  stloc.1     // b
Run Code Online (Sandbox Code Playgroud)

所以不,没有区别。