C# 什么时候在字符串之前使用@更好?

C# 什么时候在字符串之前使用@更好?,c#,string,syntax,coding-style,prefix,C#,String,Syntax,Coding Style,Prefix,在声明或使用字符串的代码中,我通常看到开发人员这样声明: string randomString = @"C:\Random\RandomFolder\ThisFile.xml"; 而不是: string randomString = "C:\\Random\\RandomFolder\\ThisFile.xml"; 这是我看到的唯一一件事,使用@前缀更好,因为你不需要做\\,但是当它比没有它更好时,还有其他用途吗?Windows路径名不是唯一有很多反斜杠的东西。例如,@-字符串对于正则表达

在声明或使用
字符串的代码中,我通常看到开发人员这样声明:

string randomString = @"C:\Random\RandomFolder\ThisFile.xml";
而不是:

string randomString = "C:\\Random\\RandomFolder\\ThisFile.xml";

这是我看到的唯一一件事,使用
@
前缀更好,因为你不需要做
\\
,但是当它比没有它更好时,还有其他用途吗?

Windows路径名不是唯一有很多反斜杠的东西。例如,@-字符串对于正则表达式非常有用,因为它们避免了双重转义

它们还可以跨越多行,因此,如果您的代码中必须包含多行字符串,它们会使代码更方便。

使正则表达式更简单

@"^(([\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#strings语法和regex语法中都是一个特殊字符,因此需要“双重转义”。例如:

string regex = "\\\\.*\\.jpg"
使用@-符号的同一表达式将更整洁:

string regex = @"\\.*\.jpg"
“”和@都是字符串文字,第一个是常规文字,但后者是逐字字符串文字

同意,因为C#是C的一个子集,设计用于UNIX路径,其中正斜杠字符用作路径分隔符,反斜杠字符用作转义字符。微软为什么选择反斜杠字符作为路径分隔符是一个奇怪的问题,特别是考虑到windows资源管理器与IE“神秘地联系在一起”,IE当然也使用UNIX路径作为URL。只有在windows下使用路径和调试时,我才使用此工具。除此之外,通常认为路径不应硬编码。所以,是的,任何时候你需要一个有很多反斜杠的字符串。