为什么 Rider 向我的 public 变量添加“@”?

Why does Rider add an "@" to my public variable?

我已经这样声明了 class:

public class Cell : IEquatable<Cell>
{
    public int id { get; }
    public SetOfCells group;
}

而每次我想使用group,Rider在@之前添加,像这样:

foreach (Cell cell in c1.@group) {
    /* blabla */
}

精度:c1.@groupc1.group有效。这是为什么?

(如果你能告诉我 google 的正确词语以找到我感兴趣的有价值的答案,因为我找不到:“csharp property +"@" 没有帮助.. .")

group 是 C# 中的关键字(对于 LINQ group clause), and @ is the "verbatim prefix" used by C# to use keywords as identifiers(例如 int @int = 3;)。

在这种情况下,@ 不是必需的:group 已作为关键字添加到更高版本的 C# 中,因此 C# 编译器必须保持与现有代码的向后兼容,并且在不允许 int 等其他关键字的情况下接受 group

var int = 3;    // won't compile
var group = 3;  // compiles

group就是所谓的"contextual keyword".

我无法回答为什么 骑手在group前面添加@。我 怀疑 Rider 试图“谨慎行事”并在每次使用 C# 关键字作为标识符之前添加一个 @ (如您所见,它不会受伤了)。

一个务实的解决方案是将您的成员重命名为 Group(大写 G)。