空字符串文字

时间:2015-06-11 22:33:13

标签: c# string

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

const string replacement = @""; 

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

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

3 个答案:

答案 0 :(得分:9)

  

此字符串用于正则表达式

正则表达式大量使用\字符。例如,以下是一个正则表达式,用于匹配从0100的前缀,它们总是有四个小数位:

^(100\.0000|[1-9]?\d\.\d{4})$

由于\必须以更常见的C#语法转义为\\ @""形式,因此可以更容易地阅读正则表达式,比较:

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

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

我建议这可能是您的同事在此特定情况下使用@""而不是""的原因。生成的.NET是相同的,但它们习惯于将@""与正则表达式一起使用。

答案 1 :(得分:5)

查看MSDN documention for string literals。对于空字符串,它没有任何效果,但它会更改某些字符转义序列的行为以及换行符处理。从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";

答案 2 :(得分:4)

以下内容:

string a = @"";
string b = "";

生成此IL:

IL_0001:  ldstr       ""
IL_0006:  stloc.0     // a
IL_0007:  ldstr       ""
IL_000C:  stloc.1     // b

所以不,没有区别。