我有一个Gender
枚举:
public enum Gender
{
Male,
Female,
Other,
Unknown
}
我在类中还有一个Gender
属性Person
:
public Gender Gender { get; set; }
但是我得到一个错误:
类型"人"已包含"性别"的定义
将枚举放在类之外确实可以解决问题,但我希望它在里面。我没有找到解决该特定问题的解决方案,MSDN.Is 有任何命名约定可以解决此类问题?
注意:我不是在征求意见,我是在问这种情况是否有众所周知的命名约定。
没有"命名约定"可以解决您希望单个类型的两个成员共享相同名称的愿望。从 C# 语言规范的第 10.3 节中,类成员:
• 常量、字段、属性、事件或类型的名称必须与同一类中声明的所有其他成员的名称不同。
• 方法的名称必须与同一类中声明的所有其他非方法的名称不同。此外,方法的签名 (§3.6) 必须与同一类中声明的所有其他方法的签名不同,
(我的强调)
因此,您必须选择使用不同的名称,或者使用显然已经丢弃的选项,将枚举放置在Person
类之外。或者,如果你真的想封装它,也许可以进一步封装它:
class Person {
class Enums {
enum Gender {
...
}
...
}
Enums.Gender Gender {get;set;}
...
}
虽然我觉得它更丑。
对于这些情况,没有"众所周知的命名约定"。这种不明确的命名最好通过使用它定义类型之外的类型来处理(如错误消息所示)
如果类型显式是某个类型的 API 图面的一部分,则将枚举定义为成员似乎很奇怪。
如前所述,这种情况没有命名约定。但据我所知,当内部定义的类应该经常从外部访问时,C# 准则不鼓励您使用内部类型定义。我想说的是,最好在同一个命名空间中定义Gender
Enum
人被定义,因为性别是人的公共财产。