在C#中,变量前的@符号是什么意思?

7

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

因为group不是保留关键字。

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

有任何想法为什么要这样做吗?

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

filteredPairs = @group.Pairs.ToList();

1
是的,它允许您使用保留(而非保护)关键字,但它也可以放在任何变量名之前。为什么resharper建议这样做是另一个问题,不过LINQ [group]子句是一个很好的选择。 - Oded
4
group 是 C# 中的一个上下文关键字。请参阅 MSDN - John Willemse
1
from group in filteredPairs group group by group.Something - H H
这似乎没有经过充分的研究。 - Security Hound
2
我并没有看到这个问题的问题所在;鉴于“group”确实不是保留关键字,因此这个问题是完全合法的。 - Ani
1个回答

12
正如您正确指出的那样,group不是保留关键字(语言设计人员在向语言添加新功能时尽力不引入新的保留关键字,以避免破坏现有程序)。 然而,在 LINQ 查询表达式中,它是一个上下文相关关键字。Resharper 建议您将问题变量重命名,以避免在查询表达式中使用此变量可能导致的歧义。
语言规范中得知:
7.16.1 查询表达式中的歧义
查询表达式包含许多“上下文关键字”,即在特定上下文中具有特殊含义的标识符。特别是 from、where、join、on、equals、into、let、orderby、ascending、descending、select、group 和 by。为了避免由这些标识符作为关键字或简单名称混合使用造成的查询表达式中的歧义,当这些标识符在查询表达式中出现时,这些标识符被视为关键字。对于这个目的,查询表达式是任何以“from 标识符”开头,后面跟着除“;”、“=”或“,”之外的任何令牌的表达式。
如果您尝试执行以下操作,您将会得到编译器错误:
var filteredParis = from pair in group.Pairs // group is now treated as a keyword
                    select pair;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接