o.k*_*k.w 249 .net c# enums naming-conventions plural
我问这个问题,尽管在枚举和匹配属性的C#命名约定中读过类似但不完全正确的内容
我发现我倾向于将枚举命名为复数,然后将它们用作单数,例如:
public enum EntityTypes {
Type1, Type2
}
public class SomeClass {
/*
some codes
*/
public EntityTypes EntityType {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
当然它有效,这是我的风格,但任何人都可以找到这种惯例的潜在问题吗?我确实有一个"丑陋"的命名与"状态"一词:
public enum OrderStatuses {
Pending, Fulfilled, Error, Blah, Blah
}
public class SomeClass {
/*
some codes
*/
public OrderStatuses OrderStatus {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
附加信息:也许我的问题不够明确.在命名我定义的枚举类型的变量时,我经常要努力思考.我知道最佳实践,但它无助于简化命名这些变量的工作.
我不可能将我的所有枚举属性(比如"状态")公开为"MyStatus".
我的问题:任何人都可以找到上述惯例的潜在问题吗?这不是最佳做法.
问题改写:
嗯,我想我应该这样问这个问题:有人能用一种很好的通用方法来命名枚举类型,这样在使用时,枚举"实例"的命名会非常简单吗?
jas*_*son 313
Microsoft建议使用singular for Enums,除非Enum表示位字段(也使用它FlagsAttribute).请参阅枚举类型命名约定(Microsoft的命名准则的子集).
为了回应您的澄清,我认为以下任何一项都没有错:
public enum OrderStatus { Pending, Fulfilled, Error };
public class SomeClass {
public OrderStatus OrderStatus { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
要么
public enum OrderStatus { Pending, Fulfilled, Error };
public class SomeClass {
public OrderStatus Status { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
Bob*_*man 35
我开始用复数命名枚举,但后来改为单数.在他们使用的地方似乎更有意义.
enum Status { Unknown = 0, Incomplete, Ready }
Status myStatus = Status.Ready;
Run Code Online (Sandbox Code Playgroud)
相比于:
Statuses myStatus = Statuses.Ready;
Run Code Online (Sandbox Code Playgroud)
我发现单数形式在上下文中听起来更自然.我们一致同意,当宣布在一个地方发生的枚举时,我们正在思考"这是一群凡人",但在使用它时,大概在许多地方,我们正在思考"这是一个什么" .
Kyl*_*ndo 24
这种情况从未真正适用于复数.
An enum显示某种或另一种的属性.我举个例子:
enum Humour
{
Irony,
Sarcasm,
Slapstick,
Nothing
}
Run Code Online (Sandbox Code Playgroud)
你可以有一种类型,但尝试用多个而不是复数来考虑它:
Humour.Irony | Humour.Sarcasm
而不是
Humours { Irony, Sarcasm }
你有幽默感,没有幽默感.
Cha*_*ana 13
通常,最佳实践建议是单数的,除了那些附加[Flags]属性的枚举(因此可以包含位字段),它应该是复数.
阅读完编辑后的问题后,我觉得您可能认为属性名称或变量名称必须与枚举类型名称不同......它没有.以下是完美的......
public enum Status { New, Edited, Approved, Cancelled, Closed }
public class Order
{
private Status stat;
public Status Status
{
get { return stat; }
set { stat = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
这是我不同意公约的少数地方之一,足以反对它.TBH,我讨厌枚举的定义和它的实例可以有相同的名称.我专门用"Enum"对我的所有枚举进行后缀,因为它清楚地说明了它在任何给定用法中的上下文.IMO它使代码更具可读性.
public enum PersonTypesEnum {
smart,
sad,
funny,
angry
}
public class Person {
public PersonTypesEnum PersonType {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
没有人会混淆什么是枚举,它的实例是什么.
小智 7
如果您试图编写简单却禁止的代码,例如:
public class Person
{
public enum Gender
{
Male,
Female
}
//Won't compile: auto-property has same name as enum
public Gender Gender { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
您的选择是:
忽略MS建议,并在枚举名称上使用前缀或后缀:
public class Person
{
public enum GenderEnum
{
Male,
Female
}
public GenderEnum Gender { get; set; }
}
Run Code Online (Sandbox Code Playgroud)将枚举定义移到该类之外,最好移到另一个类。这是上述的简单解决方案:
public class Characteristics
{
public enum Gender
{
Male,
Female
}
}
public class Person
{
public Characteristics.Gender Gender { get; set; }
}
Run Code Online (Sandbox Code Playgroud)最佳实践 - 使用单数.您有一个组成Enum的项目列表.当你说时,使用列表中的项目听起来很奇怪Versions.1_0.更有意义的是,Version.1_0因为只有一个1_0版本.
来晚了...
您的问题与您提到的问题(我问过;-) 之间存在重要区别:
您将枚举定义放在类之外,这使您可以为枚举和属性使用相同的名称:
public enum EntityType {
Type1, Type2
}
public class SomeClass {
public EntityType EntityType {get; set;} // This is legal
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我将遵循MS指南,并为枚举使用单数名称(用于标记的复数)。这是最简单的解决方案。
我的问题(在另一个问题中)是何时在类的范围内定义枚举,从而阻止使用恰好以枚举命名的属性。
| 归档时间: |
|
| 查看次数: |
123058 次 |
| 最近记录: |