猿问

字符串插值 - 大括号内的 @ 符号有什么作用?

考虑:


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 符号呢?


慕少森
浏览 172回答 2
2回答

FFIVE

$"Hello { myValue }"是 C#6 中引入的内插字符串。在您的情况下,这相当于调用String.Format("Hello {0}", myValue).@当您的变量与关键字同名时需要逐字 ( ) ,而据我所知,newline这不是。但是,以下会导致编译器错误:String.Format("Hello {0}", if)虽然这不会:String.Format("Hello {0}", @if)这里逐字告诉编译器这if是一个变量的名称,而不是if-关键字。所以你不需要逐字逐句,因为newline不是关键字。或者换句话说,您的代码等效于:Console.WriteLine("Hello with at{0}how are you?", @newline);这是逐字逐句的有效(即使是多余的)用法。有关更多信息,请参阅有关 string-interpolation的文档。

哈士奇WWW

这是一个多余的逐字前缀。从C# 规范:前缀“@”允许使用关键字作为标识符,这在与其他编程语言交互时非常有用。字符@ 实际上不是标识符的一部分,因此标识符在其他语言中可能被视为普通标识符,没有前缀。带有@ 前缀的标识符称为逐字标识符。允许对不是关键字的标识符使用 @ 前缀,但强烈建议不要作为样式问题。一个用例是,如果您想编写这样的函数:private void print(string @string) => Console.WriteLine(@string);通常您无法命名标识符,string因为它是一个保留关键字。该@前缀允许你这样做。
随时随地看视频慕课网APP
我要回答