代码之家  ›  专栏  ›  技术社区  ›  Thomas

字符串插值-花括号内的@符号做什么?

  •  24
  • Thomas  · 技术社区  · 6 年前

    考虑:

    string newline = "\r\n";
    
    Console.WriteLine($"Hello without at{newline}how are you?");
    Console.WriteLine($"Hello with at{@newline}how are you?");
    

    两条线的输出相同。换行符总是作为换行符打印的。

    Hello without at
    how are you?
    Hello with at
    how are you?
    

    我什么时候需要at标志 里面 大括号?

    2 回复  |  直到 6 年前
        1
  •  30
  •   MakePeaceGreatAgain    6 年前

    $"Hello { myValue }" 是C#6中引入的插值字符串。在你的情况下,这相当于打电话给 String.Format("Hello {0}", myValue) .

    @ newline 不是。但是,以下情况会导致编译器错误:

    String.Format("Hello {0}", if)
    

    但这不会:

    String.Format("Hello {0}", @if)
    

    if 是一个 变量 如果 - .

    不是关键字。或者换句话说,您的代码等效于:

    Console.WriteLine("Hello with at{0}how are you?", @newline);
    

    有关更多信息,请参阅 documentation about string-interpolation .

        2
  •  15
  •   Peter Mortensen icecrime    6 年前

    C# specification

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

    如果您想编写这样一个函数,可以使用以下用例:

    private void print(string @string) => Console.WriteLine(@string);
    

    string 因为它是一个保留关键字。这个 @ 前缀使您可以这样做。

    推荐文章