【问题标题】:what does @ before variabe means in c#?c#中的@ before变量是什么意思?
【发布时间】:2013-02-12 14:29:50
【问题描述】:

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

因为group 不是保留关键字。

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

知道为什么吗?

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

filteredPairs = @group.Pairs.ToList();

【问题讨论】:

  • 是的,它允许您使用保留(未保留)关键字,但也允许在 any 变量名之前使用。为什么 resharper 建议它,是另一个问题,尽管 LINQ group 子句是一个很好的候选者。
  • group 是 C# 中的上下文关键字。见MSDN
  • from group in filteredPairs group group by group.Something
  • 这似乎没有得到很好的研究。
  • 我没有看到这个问题的问题;这是完全合法的,因为group 确实不是保留关键字。

标签: c# resharper


【解决方案1】:

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

来自language specification

7.16.1 查询表达式中的歧义

查询表达式包含许多“上下文关键字”,即具有特殊的标识符 在给定的上下文中的意义。具体来说,这些来自、哪里、加入、 on、等于、进入、让、orderby、升序、降序、选择、 和通过。为了避免查询表达式中的歧义 混合使用这些标识符作为关键字或简单名称,这些 当标识符出现在一个 查询表达式。为此,查询表达式是任何 以“from identifier”开头的表达式,后跟任何标记 除了“;”、“=”或“,”。

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

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

【讨论】:

    猜你喜欢
    • 2011-08-30
    • 2021-11-25
    • 1970-01-01
    • 1970-01-01
    • 2018-08-18
    • 2022-01-25
    • 1970-01-01
    • 2016-10-17
    相关资源
    最近更新 更多