繁体   English   中英

C#中'@'的所有用法是什么?

[英]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:\\”)来反转斜杠。

@表示该字符串是文字字符串,因此您不必转义其中的字符。 正如字符串文档所说:

逐字字符串的优点是不处理转义序列,这使得它易于编写,例如,完全限定的文件名:@“c:\\ Docs \\ Source \\ a.txt”而不是"c:\\\\Docs\\\\Source\\\\a.txt"

在字符串之前放置@将其从常规文字字符串转换为逐字字面字符串,该字符串不使用正斜杠来转义()但在行中使用两个引号来转义引号。

Jon Skeet在C#/ .NET中写了更多关于字符串的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM