如何根据命名约定在 C# 中命名类型为 Gender 的 Gender 属性



我有一个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 人被定义,因为性别是人的公共财产。

最新更新