2011-04-30 80 views
4

在声明或使用string代码,我通常看到开发商宣称它是这样的:什么时候在字符串之前使用@会更好?

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

相反的:

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

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

回答

8

@标志指示编译器该字符串是verbatim string literal,因而不需要你逃跑的任何字符。当然不只是反斜杠。编译器不会处理任何类型的转义序列。

无论是“更好”还是非常难回答的问题。这是一个纯粹的文体选择。有些人可能会争辩说,当你使用字符串时,字符串内容更多是可读的,而不是必须转义所有字符。其他人可能更喜欢一致性,其中包含通常需要转义的字符的所有字符串都必须转义。这使得更容易注意到代码中的错误。 (对于它的价值,我属于后一阵营。我的所有路径具有\\。)

话虽这么说,这是的正则表达式,为这否则你可以逃避所有的地方非常方便。而且由于它们看起来不像常规字符串,所以混淆的风险很小。

+0

同意,因为C#是C的一个子集,它被设计用于UNIX路径,其中正斜杠字符被用作路径分隔符,所以反斜线字符被用作转义字符。 为什么微软选择反斜线字符作为他们的路径分隔符是一个奇怪的问题,尤其是考虑到Windows资源管理器与IE“神秘地联系”,这当然也使用UNIX路径来访问URL。 只有在窗口中使用路径和调试时才使用这个litteral。除此之外,通常认为路径不应该被硬编码。 所以是的,任何时候你需要一个字符串w /很多反斜杠。 – awiebe 2012-08-20 01:44:34

5

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

它们也可以跨越多行,所以如果最终不得不在代码中使用多行字符串,它们会使它更方便一些。

1

使正则表达式的简单

@"^(([\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"; 
1

这对于显式地匹配反斜杠字符的正则表达式尤其有用。由于这是C#字符串语法和正则表达式语法中的特殊字符,因此需要“双重转义”。例如:使用@ -notation

string regex = "\\\\.*\\.jpg" 

相同的表达会更整洁:

string regex = @"\\.*\.jpg" 
相关问题