[英]What are all the usages of '@' in C#?
我注意到这段代码:
FileInfo[] files =new DirectoryInfo(@"C:\").GetFiles();
@
的目的是什么? 还有其他用途吗?
C#支持两种形式的字符串文字: 常规字符串文字和逐字字符串文字 。
常规字符串文字由用双引号括起来的零个或多个字符组成,如“hello”中所示,并且可以包括简单转义序列(例如用于制表符的\\ t)和十六进制和Unicode转义序列。
逐字字符串文字由@字符后跟双引号字符,零个或多个字符以及结束双引号字符组成。 一个简单的例子就是@“你好”。 在逐字字符串文字中,分隔符之间的字符是逐字解释的,唯一的例外是quote-escape-sequence。 特别是,简单的转义序列和十六进制和Unicode转义序列不会在逐字字符串文字中处理。 逐字字符串文字可以跨越多行。
例1:
@"C:\Path\File.zip" == "C:\\Path\\File.zip"
// where
"C:\\Path\\File.zip" // regular string literal
@"C:\Path\File.zip" // verbatim string literal
注意 :在逐字字符串文字中,您应该转义双引号。
例2:
@"He said: ""Hello""" == "He said: \"Hello\""
更多信息 :
前缀“@”允许使用关键字作为标识符,这在与其他编程语言交互时很有用。 字符@实际上不是标识符的一部分,因此标识符可能在其他语言中看作普通标识符,没有前缀。 带有@前缀的标识符称为逐字标识符。 允许使用@前缀作为非关键字的标识符,但强烈建议不要使用样式。
例:
class @class
{
public static void @static(bool @bool) {
if (@bool)
System.Console.WriteLine("true");
else
System.Console.WriteLine("false");
}
}
class Class1
{
static void M() {
cl\u0061ss.st\u0061tic(true);
}
}
@
符号在C#中有几个含义:
当在字符串的开头使用时,它意味着“从字面上理解这个字符串;不要解释否则将用作转义字符的字符”。 这称为逐字字符串文字 。 例如, @"\\n\\t"
等于"\\\\n\\\\t"
。
当在标识符的开头使用时,它意味着“将其解释为标识符,而不是关键字”。 例如, int @this
将允许您命名一个整数变量“this”,这通常是非法的,因为this
是一个关键字。
@符号基本上表示“完全按原样使用此字符串”。 它允许开发人员避免转义。
所以,@“C:\\”==“C:\\\\”(使用\\转义)。
我发现它在RegEx中最有用......当你开始转义不同的东西等时,RegEx会变得非常讨厌和混乱,所以只使用文字值很好。
这是一个逐字字符串文字,因此您可以使用反斜杠而不会被解释为转义字符。
逐字字符串文字由
@
字符后跟双引号字符,零个或多个字符以及结束双引号字符组成。 一个简单的例子就是@"hello"
。 在逐字字符串文字中,分隔符之间的字符是逐字解释的,唯一的例外是quote-escape-sequence 。 特别是,简单的转义序列和十六进制和Unicode转义序列不会在逐字字符串文字中处理。 逐字字符串文字可以跨越多行。
quote-escape-sequence: ""
因此,唯一逃避逐字字符串文字的做法是将""
为"
在两个内部”。
字符串前面的@符号允许字符串的字面解释,否则你必须用另一个(“C:\\”)来反转斜杠。
在字符串之前放置@将其从常规文字字符串转换为逐字字面字符串,该字符串不使用正斜杠来转义()但在行中使用两个引号来转义引号。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.