C# 空字符串文字

C# 空字符串文字,c#,string,C#,String,我在代码审查期间遇到一些代码,其中一位老同事做了以下工作: const string replacement = @""; string a = @""; string b = ""; 此字符串在正则表达式中用作匹配内容的替换。我的问题是在空字符串的开头添加@literal符号的目的是什么。不应该有任何字面上的解释 以下两种方法之间的影响是否存在差异:@和”?查看。对于空字符串,它没有效果,但是它会更改某些字符转义序列的行为以及换行处理。来自MSDN站点的示例: string a = "h

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

const string replacement = @""; 
string a = @"";
string b = "";
此字符串在正则表达式中用作匹配内容的替换。我的问题是在空字符串的开头添加@literal符号的目的是什么。不应该有任何字面上的解释

以下两种方法之间的影响是否存在差异:
@

查看。对于空字符串,它没有效果,但是它会更改某些字符转义序列的行为以及换行处理。来自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";
以下是:

const string replacement = @""; 
string a = @"";
string b = "";
生成此IL:

IL_0001:  ldstr       ""
IL_0006:  stloc.0     // a
IL_0007:  ldstr       ""
IL_000C:  stloc.1     // b
所以,没有区别

此字符串用于正则表达式中

正则表达式大量使用
\
字符。例如,下面是一个正则表达式,用于匹配从
0
100
的始终有四位小数的前几位:

^(100\.0000|[1-9]?\d\.\d{4})$
由于
\
必须以更常见的C语法转义到
\
中,
@“
表单允许更容易读取正则表达式,请比较:

"^(100\\.0000|[1-9]?\\d\\.\\d{4})$"
@"^(100\.0000|[1-9]?\d\.\d{4})$"
由于这个原因,人们在使用正则表达式时经常养成使用
@“
形式的习惯,即使在没有区别的情况下也是如此。一方面,如果他们后来更改到某个确实会产生影响的地方,那么只需要更改表达式,而不需要更改字符串本身的代码


我认为这可能是您的同事在这种特殊情况下使用
@“
而不是
的原因。NET生成的是相同的,但它们习惯于使用正则表达式。

为什么不试着在代码中比较这两个呢。调试器没有区别,我想知道还有其他可能更具理论性的区别。@bum不一定总是那么简单。。。e、 g.尝试此
十进制x=0.0m;十进制y=0.00m;Write(“{0},{1},{2}”,x,y,x==y)@Partha我想既然OP使用了正确的术语,他就明白了@是什么,只是一个谜,为什么它能在空的机器上做任何有用的事情string@DavidG这与@“对”有什么关系