枚举命名约定 – 复数

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

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

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

当然这是有效的,这是我的风格,但是谁能find这样的惯例潜在的问题呢? 虽然我有一个“丑陋”的名字,但是“状态”

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

附加信息:也许我的问题不够清楚。 命名我定义的枚举types的variables时,我经常不得不认真思考。 我知道最好的做法,但是这并不能帮助我减轻命名这些variables的工作。

我不可能公开所有我的枚举属性(称为“状态”)为“MyStatus”。

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

问题改述:

那么,我想我应该问这样的问题:有人可以出一个很好的通用的方式来命名枚举types,使用时,枚举“实例”的命名将是非常简单的?

Microsoftbuild议对Enum使用单数,除非Enum表示位域(也使用FlagsAttribute )。 请参阅枚举types命名约定 (Microsoft 命名指南的子集)。

为了回应您的澄清,我发现以下任何一点都没有错:

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

我开始用复数命名枚举,但后来改为单数。 只是在使用的地方似乎更有意义。

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

相比于:

 Statuses myStatus = Statuses.Ready; 

我觉得单数forms听起来更自然。 我们一致认为,在一个地方发生枚举时,我们认为“这是一群凡是”,但是在使用它的时候,可能在很多地方我们都在想“这是一个什么” 。

这种情况从来不适用于复数。

一个enum显示某个或另一个属性。 我举个例子:

 enum Humour { Irony, Sarcasm, Slapstick, Nothing } 

你可以有一个types,但是可以把它想成多个而不是复数:

Humour.Irony | Humour.Sarcasm

而不是

Humours { Irony, Sarcasm }

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

一般来说,最佳实践build议是单一的,除了那些具有[Flags]属性的枚举(因此它可以包含位域),这应该是复数。

阅读你编辑的问题后,我感觉你可能认为属性名称或variables名称必须不同于枚举types名称…它不。 以下是非常好的…

  public enum Status { New, Edited, Approved, Cancelled, Closed } public class Order { private Status stat; public Status Status { get { return stat; } set { stat = value; } } } 

最佳实践 – 使用单数。 你有一个组成Enum的项目列表。 当您说Versions.1_0时,使用列表中的项目听起来很奇怪。 由于只有一个1_0版本,所以说Version.1_0更有意义。

来不及了…

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

您将枚举定义放在类的外面,这样您可以为枚举和属性使用相同的名称:

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

在这种情况下,我会遵循MS指南,并使用enum(复数标志)的单数名称。 这是最容易的解决scheme。

我的问题(在另一个问题 )是枚举是在类的范围内定义的,防止使用一个名为完全在枚举后面的属性。

如果你正试图写简单直接的代码,像这样:

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

您的select是:

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

     public class Person { public enum GenderEnum { Male, Female } public GenderEnum Gender { get; set; } } 
  2. 将类的枚举定义移到另一个类中。 这是上述的一个简单的解决scheme:

     public class Characteristics { public enum Gender { Male, Female } } public class Person { public Characteristics.Gender Gender { get; set; } } 

在另一个线程的C#命名约定枚举和匹配属性有人指出我认为是一个非常好的主意:

“我知道我的build议不符合.NET命名约定,但是我个人使用'E'作为枚举前缀,使用'F'作为枚举标志(类似于我们如何在I前加接口)。