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这与@“对”有什么关系