变量中的@在c#中意味着什么?

Ela*_*nda 7 c# resharper

首先,它不是重复的 变量名称中的@符号在C#中是什么意思?

因为group不是保留的关键字.

我写了一些代码,resharper建议我@在变量之前添加group.

知道为什么吗?

var group = GetDefaultGroup(ClientServiceCommon.Poco.Group);

filteredPairs = @group.Pairs.ToList();
Run Code Online (Sandbox Code Playgroud)

Ani*_*Ani 12

正如您正确指出的那样,group不是保留关键字(语言设计者在为语言添加新功能以便不破坏现有程序时,尽量不引入新的保留关键字).但是,它是一个上下文关键字:它成为LINQ查询表达式中的关键字.Resharper建议您重命名相关变量,以避免在查询表达式中使用此变量时可能导致的歧义.

语言规范:

7.16.1查询表达式中的歧义

查询表达式包含许多"上下文关键字",即在给定上下文中具有特殊含义的标识符.具体来说,这些来自,在哪里,加入,开启,等于,进入,让,顺序,升序,降序,选择,分组 和通过.为了避免引起混合使用这些标识符作为关键字或简单名称的查询表达式歧义,查询表达式内的任何地方发生时这些标识符被视为关键字.为此,查询表达式是以"from identifier"开头,后跟除";","="或","之外的任何标记的任何表达式.

如果您尝试执行以下操作,则会出现编译器错误:

var filteredParis = from pair in group.Pairs // group is now treated as a keyword
                    select pair;
Run Code Online (Sandbox Code Playgroud)