为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
慕少森 2021-12-25 16:24:18
考虑:string newline = "\r\n";Console.WriteLine($"Hello without at{newline}how are you?");Console.WriteLine($"Hello with at{@newline}how are you?");两行的输出是相同的。换行符始终打印为换行符。Hello without athow are you?Hello with athow are you?那么我什么时候需要花括号内的at 符号呢?
查看完整描述

2 回答

?
FFIVE

TA贡献1797条经验 获得超6个赞

$"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文档


查看完整回答
反对 回复 2021-12-25
?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

这是一个多余的逐字前缀。从C# 规范

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

一个用例是,如果您想编写这样的函数:

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

通常您无法命名标识符,string因为它是一个保留关键字。该@前缀允许你这样做。


查看完整回答
反对 回复 2021-12-25
  • 2 回答
  • 0 关注
  • 171 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信