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

'的所有用法是什么@';在C#中?,c#,.net,C#,.net,我注意到这段代码: FileInfo[] files =new DirectoryInfo(@"C:\").GetFiles(); @的目的是什么?还有其他用途吗?Strings文本 C#支持两种形式的字符串文本:常规字符串文本和逐字字符串文本 常规字符串文字由零个或多个用双引号括起来的字符组成,如“hello”,可能包括简单转义序列(如制表符的\t)以及十六进制和Unicode转义序列 逐字字符串文本由@字符后跟双引号字符、零个或多个字符以及结束双引号字符组成。一个简单的例子是@“你好”。

我注意到这段代码:

 FileInfo[] files =new DirectoryInfo(@"C:\").GetFiles();
@
的目的是什么?还有其他用途吗?

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

常规字符串文字由零个或多个用双引号括起来的字符组成,如“hello”,可能包括简单转义序列(如制表符的\t)以及十六进制和Unicode转义序列

逐字字符串文本由@字符后跟双引号字符、零个或多个字符以及结束双引号字符组成。一个简单的例子是@“你好”。在逐字字符串文字中,分隔符之间的字符将逐字解释,唯一的例外是引号转义序列。特别是,简单转义序列以及十六进制和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
@"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);
    }
}
注意:在逐字字符串文本中,应转义双引号

示例2:

@"C:\Path\File.zip" == "C:\\Path\\File.zip"

// where

"C:\\Path\\File.zip" // regular string literal
@"C:\Path\File.zip"  // verbatim string literal
@"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);
    }
}
更多信息请点击此处

  • 在MSDN
  • 在MSDN
  • 在MSDN
标识符 前缀“@”允许使用关键字作为标识符,这在与其他编程语言交互时非常有用。字符@实际上不是标识符的一部分,因此该标识符在其他语言中可能被视为普通标识符,没有前缀。带有@前缀的标识符称为逐字标识符。允许对非关键字的标识符使用@前缀,但强烈反对使用@前缀作为样式

示例:

@"C:\Path\File.zip" == "C:\\Path\\File.zip"

// where

"C:\\Path\\File.zip" // regular string literal
@"C:\Path\File.zip"  // verbatim string literal
@"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);
    }
}

@symbol基本上表示“照原样使用此字符串”。它允许开发人员避免逃逸

所以,@“C:\”==“C:\”(带\转义符)


我发现它在正则表达式中最有用。。。当您开始转义不同的内容时,正则表达式可能会变得非常讨厌和混乱,等等,所以最好只使用文本值。

字符串前的@符号允许对字符串进行文本解释,否则您必须使用另一个(“C:\”)来转义反斜杠.

这是一个字符,因此您可以使用反斜杠,而不会被解释为转义字符

逐字字符串文字包括 一个
@
字符,后跟一个 双引号字符,零或更多 字符和结束双引号 性格一个简单的例子是
@“你好”
。一字不差 文本之间的字符 分隔符是逐字解释的, 唯一的例外是 引用转义序列。特别地, 简单逃逸序列及其应用 十六进制和Unicode转义 序列不在中处理 逐字字符串文本。逐字记录 字符串文字可以跨越多个字符 台词

引用转义序列:
“”


因此,逐字字符串文本的唯一转义是在两个“s”内转义
”。

@表示字符串是文本字符串,因此不必转义其中的字符。正如《基本法》所说:

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


将@放在字符串之前会将其从常规文字字符串转换为逐字逐句文字字符串,该字符串不使用正斜杠来转义(),而是使用一行中的两个引号来转义引号


符号
@
在C#中有两种含义:

  • 当在字符串开头使用时,它的意思是“按字面意思理解此字符串;不要解释否则将用作转义字符的字符”。这称为。例如,
    @“\n\t”
    等于
    “\\n\\t”

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


除了双引号之外,不是大多数。它还允许多行字符串。您错过了在标识符上使用@-问题中没有明确提到,但我想说主题中包括它。