-->

枚举命名约定 - 复数(Enum Naming Convention - Plural)

2019-07-17 15:15发布

我问这个问题,尽管在看过类似,但不完全是我想在C#,枚举和匹配属性命名约定

我发现我有一种倾向,名称多枚举,然后“用”他们为单数,例如:

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;}

}

附加信息:也许我的问题不太清楚。 我经常命名我的定义枚举类型的变量时费尽心思。 我知道最好的做法,但它并不能帮助缓解我命名这些变量的工作。

我不可能暴露我的所有属性的枚举(说“状态”)为“MyStatus”。

我的问题:与上述约定我任何人都可以发现潜在的问题? 这是不是最好的做法。

问改写:

嗯,我想我应该问的问题是这样的:一个人能站出来命名枚举类型这样在使用时,枚举“实例”的命名将是非常简单的一个很好的通用的方式?

Answer 1:

微软建议使用单数Enum小号除非Enum代表位字段(使用FlagsAttribute为好)。 见枚举类型命名约定 (微软的一个子集命名原则 )。

为了你的澄清回应,我认为没有错用下面的:

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; }
}


Answer 2:

我开始了命名复数枚举但此后改为单数。 只是似乎更有意义,在他们用在的情况下。

enum Status { Unknown = 0, Incomplete, Ready }

Status myStatus = Status.Ready;

相比于:

Statuses myStatus = Statuses.Ready;

我觉得单数形式,以在上下文中听起来更自然。 我们都同意,声明枚举,这发生在一个地方的时候,我们会想“这是一群凡是的”,但使用它的时候,想必在很多地方,我们会想:“这是一个什么” 。



Answer 3:

形势从来没有真正适用于复数。

一个enum显示的东西或其他的属性。 我举个例子:

enum Humour
{
  Irony,
  Sarcasm,
  Slapstick,
  Nothing
}

你可以有一个类型,但尽量把它在多,而不是复数:

Humour.Irony | Humour.Sarcasm

而不是

Humours { Irony, Sarcasm }

你有幽默感,你没有体液的感觉。



Answer 4:

一般来说,最好的做法是建议单数,除了那些具有[旗]属性附加到它们,(并因此可以包含比特字段)枚举,这应该是多个。

读你的编辑的问题后,我让你也许会想,属性名或变量名必须是从枚举类型名称不同的感觉...它没有。 以下是完全没有问题...

  public enum Status { New, Edited, Approved, Cancelled, Closed }

  public class Order
  {
      private Status stat;
      public Status Status
      { 
         get { return stat; }
         set { stat = value; }
      }
  }


Answer 5:

这是我与约定足够去反对它不同意的几个地方之一。 TBH,我恨枚举的定义,它的实例可以具有相同的名称。 我postfix的所有我用枚举“枚举”特别的,因为它明确什么它的内容在任何给定的使用。 IMO它使代码更易读。

public enum PersonTypesEnum {
    smart,
    sad,
    funny,
    angry
}


public class Person {   
    public PersonTypesEnum PersonType {get; set;}
}

没有人会搞不清什么是枚举,什么是它的实例。



Answer 6:

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



Answer 7:

即将在有点晚了......

有你的问题和一个之间的一个重要区别,你提到 (我问;-):

你把枚举定义出来的类,它可以让你对枚举和属性的名称相同的:

public enum EntityType { 
  Type1, Type2 
} 

public class SomeClass { 
  public EntityType EntityType {get; set;} // This is legal

}

在这种情况下,我会按照MS guidelins和枚举(复数为标志)使用奇异的名字。 这是probaby最简单的解决方案。

我的问题(在其他问题时,枚举在类的范围界定,防止使用一个枚举后正好命名属性)是。



Answer 8:

如果你试图写简单,但禁止这样的代码:

    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; } } 


Answer 9:

在其他线程,枚举和匹配性C#命名约定有人指出,我认为是一个很好的主意:

“我知道我的建议违背了.NET命名约定,但我与‘E’和枚举标志用‘F’个人前缀枚举(类似于我们如何前缀‘我’接口)。”



文章来源: Enum Naming Convention - Plural