代码之家  ›  专栏  ›  技术社区  ›  o.k.w

枚举命名约定-复数

  •  221
  • o.k.w  · 技术社区  · 15 年前

    我在问这个问题,尽管我读过类似的但不完全是我想要的 C# naming convention for enum and matching property

    我发现我倾向于用复数命名枚举,然后“使用”它们作为单数,例如:

    public enum EntityTypes {
      Type1, Type2
    }
    
    public class SomeClass {
      /*
        some codes
      */
    
      public EntityTypes EntityType {get; set;}
    
    }
    

    当然可以,这是我的风格,但是有人能发现这种惯例的潜在问题吗?我确实有一个“丑陋”的名字,用“地位”这个词命名,但是:

    public enum OrderStatuses {
      Pending, Fulfilled, Error, Blah, Blah
    }
    
    public class SomeClass {
      /*
        some codes
      */
    
      public OrderStatuses OrderStatus {get; set;}
    
    }
    

    其他信息: 也许我的问题不够清楚。在命名我定义的枚举类型的变量时,我经常要仔细考虑。我知道最佳实践,但这并不能帮助我轻松地命名这些变量。

    我不可能将所有枚举属性(比如“status”)公开为“my status”。

    我的问题是:有人能发现我上面所描述的惯例的潜在问题吗? 这与最佳实践无关。

    问题改写:

    好吧,我想我应该这样问这个问题:有人能想出一种好的通用方法来命名枚举类型吗?这样当使用时,枚举“instance”的命名会非常简单?

    9 回复  |  直到 6 年前
        1
  •  289
  •   jason    11 年前

    Microsoft建议使用单数 Enum S除非 枚举 表示位字段(使用 FlagsAttribute 同样如此。见 Enumeration Type Naming Conventions (微软的一个子集 Naming Guidelines )

    为了回答您的澄清,我认为以下任何一项都没有问题:

    public enum OrderStatus { Pending, Fulfilled, Error };
    
    public class SomeClass { 
        public OrderStatus OrderStatus { get; set; }
    }
    

    public enum OrderStatus { Pending, Fulfilled, Error };
    
    public class SomeClass {
        public OrderStatus Status { get; set; }
    }
    
        2
  •  32
  •   Bob Kaufman    8 年前

    我开始用复数命名枚举,但后来改为单数。在使用它们的环境中似乎更有意义。

    enum Status { Unknown = 0, Incomplete, Ready }
    
    Status myStatus = Status.Ready;
    

    比较:

    Statuses myStatus = Statuses.Ready;
    

    我发现单数形式在上下文中听起来更自然。我们一致认为,在一个地方声明枚举时,我们认为“这是一组whatever”,但在许多地方使用枚举时,我们认为“这是一个随便的东西”。

        3
  •  21
  •   Kyle Rosendo    15 年前

    这种情况并不适用于复数。

    enum 显示某物或其他物的属性。我举个例子:

    enum Humour
    {
      Irony,
      Sarcasm,
      Slapstick,
      Nothing
    }
    

    你可以有一种类型,但是试着用复数而不是复数来考虑它:

    Humour.Irony | Humour.Sarcasm

    而不是

    Humours { Irony, Sarcasm }

    你有幽默感,你没有幽默感。

        4
  •  11
  •   Charles Bretana    10 年前

    一般来说,最佳实践建议是单数的,除了那些带有[flags]属性的枚举(因此可以包含位字段),它应该是复数。

    在阅读了你编辑的问题后,我觉得你可能认为属性名或变量名必须与枚举类型名不同…没有。下面的内容很好…

      public enum Status { New, Edited, Approved, Cancelled, Closed }
    
      public class Order
      {
          private Status stat;
          public Status Status
          { 
             get { return stat; }
             set { stat = value; }
          }
      }
    
        5
  •  9
  •   Heather    6 年前

    这是少数几个我不同意该公约的地方之一,足以违反该公约。tbh,我讨厌枚举的定义和它的实例可以有相同的名称。我将所有枚举都用“enum”后缀,因为它可以清楚地说明在任何给定的用法中它的上下文。在我看来,它使代码更可读。

    public enum PersonTypesEnum {
        smart,
        sad,
        funny,
        angry
    }
    
    
    public class Person {   
        public PersonTypesEnum PersonType {get; set;}
    }
    

    没有人会混淆什么是枚举,什么是枚举的实例。

        6
  •  6
  •   Jeremy Cron    15 年前

    最佳实践-使用单数。您有组成枚举的项列表。使用列表中的项目听起来很奇怪 Versions.1_0 . 说起来更有意义 Version.1_0 因为只有一个1_0版本。

        7
  •  4
  •   Community Egal    7 年前

    进来有点晚…

    你的问题和那个问题有很大的区别 you mention (我问过;-):

    将枚举定义从类中取出,这样可以使枚举和属性具有相同的名称:

    public enum EntityType { 
      Type1, Type2 
    } 
    
    public class SomeClass { 
      public EntityType EntityType {get; set;} // This is legal
    
    }
    

    在本例中,我将遵循ms-guidelins并为枚举使用一个单数名称(标记的复数形式)。这可能是最简单的解决办法。

    我的问题(在 other question )在类的作用域中定义枚举时,将阻止使用与枚举完全相同的属性。

        8
  •  4
  •   MiloNC    12 年前

    如果您试图编写这样直截了当但又被禁止的代码:

        public class Person
        {
            public enum Gender
            {
                Male,
                Female
            }
            //Won't compile: auto-property has same name as enum
            public Gender Gender { get; set; }  
        }
    

    您的选择是:

    1. 忽略MS建议并在枚举名称上使用前缀或后缀:

      public class Person
      {
          public enum GenderEnum
          {
              Male,
              Female
          }
          public GenderEnum Gender { get; set; }
      }
      
    2. 将枚举定义移出类,最好移入另一个类。下面是一个简单的解决方案:

      public class Characteristics
      {
          public enum Gender
          {
              Male,
              Female
          }
      }
      public class Person
      {
          public Characteristics.Gender Gender { get; set; }  
      }
      
        9
  •  0
  •   Community Egal    7 年前

    在另一条线上 C# naming convention for enum and matching property 有人指出了我认为是个很好的主意:

    “我知道我的建议不符合.NET命名约定,但我个人将枚举前缀设置为”“e”“,将枚举标志设置为”“f”“(类似于我们如何将接口前缀设置为”“i”“)。”