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

5 .net c#

我注意到这段代码:

 FileInfo[] files =new DirectoryInfo(@"C:\").GetFiles();
Run Code Online (Sandbox Code Playgroud)

目的是@什么?还有其他用途吗?

Kon*_*kus 21

字符串文字

C#支持两种形式的字符串文字:常规字符串文字逐字字符串文字.

常规字符串文字由包含在双引号零个或多个字符,如"你好",并且可以包括简单转义序列(如\ 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
Run Code Online (Sandbox Code Playgroud)

注意:在逐字字符串文字中,您应该转义双引号.

例2:

@"He said: ""Hello""" == "He said: \"Hello\""
Run Code Online (Sandbox Code Playgroud)

更多信息:

身份标识

前缀"@"允许使用关键字作为标识符,这在与其他编程语言交互时很有用.字符@实际上不是标识符的一部分,因此标识符可能在其他语言中看作普通标识符,没有前缀.带有@前缀的标识符称为逐字标识符.允许使用@前缀作为非关键字的标识符,但强烈建议不要使用样式.

例:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)


Joh*_*lla 7

@符号在C#中有几个含义:

  • 当在字符串的开头使用时,它意味着"从字面上理解这个字符串;不要解释否则将用作转义字符的字符".这称为逐字字符串文字.例如,@"\n\t"等于"\\n\\t".

  • 当在标识符的开头使用时,它意味着"将其解释为标识符,而不是关键字".例如,int @this允许您命名一个整数变量"this",这通常是非法的,因为它this是一个关键字.