问题描述
我已经声明了一个这样的类:
public class Cell : IEquatable<Cell>
{
public int id { get; }
public SetofCells group;
}
每次我想使用 group
时,Rider 都会在之前添加和 @
,如下所示:
foreach (Cell cell in c1.@group) {
/* blabla */
}
精度:c1.@group
和 c1.group
都有效。这是为什么?
(如果你能告诉我正确的词来谷歌找到我感兴趣的有价值的答案,因为我找不到一个:“csharp property +"@"
没有帮助...”)
解决方法
group
是 C# 中的关键字(对于 LINQ group clause),而 @
是 C# 用于 "verbatim prefix" 的 use keywords as identifiers(例如 {{ 1}}).
在这种情况下,int @int = 3;
不是必需的:@
在更高版本的 C# 中作为关键字添加,因此 C# 编译器必须保持与现有代码的向后兼容并接受 { {1}} 在不允许使用其他关键字(例如 group
)的情况下:
group
int
是所谓的 "contextual keyword"。
我无法回答为什么 Rider 在 var int = 3; // won't compile
var group = 3; // compiles
前面添加了 group
。我怀疑 Rider 试图“安全操作”并在每次使用 C# 关键字之前添加一个 @
作为标识符(正如您所发现的,这并没有伤害).
实用的解决方案是将您的成员重命名为 group
(大写的 @
)。