我问这个问题,尽管我已经阅读了相似但不完全正确的内容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;}
}
附加信息:也许我的问题不够明确 . 在命名我定义的枚举类型的变量时,我经常要努力思考 . 我知道最佳实践,但它无助于简化命名这些变量的工作 .
我不可能将我的所有枚举属性(比如“状态”)公开为“MyStatus” .
我的问题:任何人都可以找到上述惯例的潜在问题吗? It is NOT about best practice.
Question rephrase:
嗯,我想我应该这样问这个问题:有人能用一种很好的通用方法来命名枚举类型,这样在使用时,枚举“实例”的命名会非常简单吗?
9 回答
通常,最佳实践建议是单数的,除了那些附加[Flags]属性的枚举(因此可以包含位字段),它应该是复数 .
阅读完编辑后的问题后,我觉得您可能认为属性名称或变量名称必须与枚举类型名称不同......它没有 . 以下是完美的......
Microsoft建议对
Enum
使用单数形式,除非Enum
表示位字段(也使用FlagsAttribute) . 请参阅Enumeration Type Naming Conventions(Microsoft的Naming Guidelines的子集) .为了回应您的澄清,我认为以下任何一项都没有错:
要么
我开始用复数命名枚举,但后来改为单数 . 在他们使用的地方似乎更有意义 .
相比于:
我发现单数形式在上下文中听起来更自然 . 我们一致同意,当宣布在一个地方发生的枚举时,我们正在思考“这是一群凡人”,但在使用它时,大概在许多地方,我们正在思考“这是一个什么” .
这种情况从未真正适用于复数 .
enum
显示某个或另一个的属性 . 我举个例子:你可以有一种类型,但尝试用多个而不是复数来考虑它:
Humour.Irony | Humour.Sarcasm
而不是
Humours { Irony, Sarcasm }
你有幽默感,没有幽默感 .
这是我不同意公约的少数地方之一,足以反对它 . TBH,我讨厌枚举的定义和它的实例可以有相同的名称 . 我专门用“Enum”对我的所有枚举进行后缀,因为它清楚地说明了它在任何给定用法中的上下文 . IMO它使代码更具可读性 .
没有人会混淆什么是枚举,它的实例是什么 .
最佳实践 - 使用单数 . 您有一个组成Enum的项目列表 . 当你说
Versions.1_0
时,使用列表中的项目听起来很奇怪 . 说Version.1_0
更有意义,因为只有一个1_0版本 .来得有点晚了......
你的问题和you mention(我问过;-)之间有一个重要的区别:
您将枚举定义排除在类之外,这允许您为枚举和属性使用相同的名称:
在这种情况下,我将遵循MS指南并使用单数名称作为枚举(复数用于标志) . 这是最简单的解决方案 .
我的问题(在other question中)是在类的范围内定义枚举时,阻止使用在枚举之后命名的属性 .
如果您正在尝试编写简单但禁止的代码,请执行以下操作:
你的选择是:
在另一个线程C# naming convention for enum and matching property有人指出我认为是一个非常好的主意:
“我知道我的建议违反了.NET命名约定,但我个人使用'E'为enums添加前缀,并使用'F'为enum标记添加前缀(类似于我们将接口添加到'I'之前) . ”