7

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

asgroup不是保留的关键字。

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

知道为什么吗?

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

filteredPairs = @group.Pairs.ToList();
4

1 回答 1

12

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

语言规范

7.16.1 查询表达式中的歧义

查询表达式包含许多“上下文关键字”,即在给定上下文中具有特殊含义的标识符。具体来说,这些是 from、where、join、on、equals、into、let、orderby、ascending、descending、select、group 和 by。为了避免由于混合使用这些标识符作为关键字或简单名称而导致查询表达式中的歧义,当这些标识符出现在查询表达式中的任何位置时,这些标识符都被视为关键字。为此,查询表达式是以“from identifier”开头的任何表达式,后跟除“;”、“=”或“,”之外的任何标记。

如果您尝试执行以下操作,您将收到编译器错误:

var filteredParis = from pair in group.Pairs // group is now treated as a keyword
                    select pair;
于 2013-02-12T14:32:17.757 回答