我问这个问题,尽管在看过类似,但不完全是我想在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; }
}
你的选择是:
忽略MS推荐和使用的枚举名称的前缀或后缀:
public class Person { public enum GenderEnum { Male, Female } public GenderEnum Gender { get; set; } }
移动枚举定义类的外部,优选地到另一个类。 下面是一个简单的解决方案,以上述:
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