什么时候在字符串前使用@更好?
本文关键字:更好 字符串 什么时候 | 更新日期: 2023-09-27 17:54:11
在声明或使用string
的代码中,我通常看到开发人员这样声明它:
string randomString = @"C:'Random'RandomFolder'ThisFile.xml";
代替:
string randomString = "C:''Random''RandomFolder''ThisFile.xml";
这是我唯一看到的使用@
前缀更好的事情,因为你不需要做''
,但是当它比没有它更好的时候,它还有其他用途吗?
@
符号向编译器表明该字符串是逐字字符串文字,因此不需要转义任何字符。当然,不仅仅是反斜杠。编译器不处理任何类型的转义序列。
''
话虽这么说,对于正则表达式来说,非常方便,否则您将到处转义。因为它们看起来不太像普通字符串,所以混淆的风险最小。
Windows路径名并不是唯一使用反斜杠的东西。例如,@-string对于正则表达式非常有用,因为它们避免了所有内容的双转义。
它们也可以跨越多行,所以如果你最终不得不在你的代码中有多行字符串,它们使它更方便。
简化正则表达式
@"^((['w-]+'.)+['w-]+|([a-zA-Z]{1}|['w-]{2,}))((([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])'.([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])'.([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])'.([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])){1}|([a-zA-Z]+['w-]+'.)+[a-zA-Z]{2,4})$";
多行字符串
string s = @"testing
some
string with multiple
lines";
对于涉及显式匹配反斜杠字符的正则表达式尤其有用。因为这在c#字符串语法和正则表达式语法中都是一个特殊字符,所以它需要"双转义"。例子:
string regex = "''''.*''.jpg"
使用@-表示法的相同表达式会更整洁:
string regex = @"''.*'.jpg"
"和@"都是字符串字面值,前者是常规字面值,后者是逐字面值c# .NET中任何字符串前的'@'前缀(c# .NET中的常规字符串文字和逐字字符串文字)