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

时间:2013-02-12 14:29:50

标签: c# resharper

首先,它不是重复的 What does the @ symbol before a variable name mean in C#?

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

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

知道为什么吗?

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

filteredPairs = @group.Pairs.ToList();

1 个答案:

答案 0 :(得分:12)

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

来自language specification

  

7.16.1查询表达式中的歧义

     

查询表达式包含许多“上下文关键字”,即具有特殊标识符的标识符   意义在给定的背景下。具体来说,这些是来自哪里,加入,   on,equals,into,let,orderby,ascending,descending,select, group   并通过。为了避免由查询表达式引起的歧义   混合使用这些标识符作为关键字或简单名称,这些   标识符在a中的任何位置发生时被视为关键字   查询表达式。为此,查询表达式是any   表达式以“from identifier”开头,后跟任何标记   除了“;”,“=”或“,”。

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

var filteredParis = from pair in group.Pairs // group is now treated as a keyword
                    select pair;