为Enum值添加前缀的好处?

问题描述:

在这post乔恩Skeet指出,下面的代码应该改变,以符合.NET命名约定。这样做也会减少代码中的噪音量。为Enum值添加前缀的好处?

Enum enUtilityTypeDetailStudentEntryWorkflow As Integer 
    enUTDSEW_Default = 379 
    enUTDSEW_ApplicantRecordBook = 380 
End Enum 

我必须承认,我非常像一只羊,在跟着别人在我面前做过的事。我认为前缀看起来不正确,然后让它两次也没有意义。 看过几个.NET Framework示例后,它看起来会更接近标准。

Enum StudentEntryWorkflow As Integer 
    Default = 379 
    ApplicantRecordBook = 380 
End Enum 

我在使用这些名称的商标吗?
其他建议或意见一般?

我不知道标准,但在枚举和枚举值上使用Hungarian notation并不是我以前见过的。

你的第二个例子更接近我通常看到的那种代码,所以在这方面,是的,它更标准。

请参阅第8.2.3节关于this指南 - pascal外壳并且没有前缀/后缀。

2.1节的指引16也表示避免前缀和后缀。

我会说这是非常普遍的 - 有点enums它的目的是为了提高可读性。使用前缀和后缀会降低可读性,因此非常普遍不受欢迎。

在我工作的地方,我们也使用了一个用于枚举的前缀(E在我们的例子中),我必须说我喜欢它。它使得发现Enum变得非常容易,并将它与类或变量区分开来。下面是我们的代码库的例子:

myJob.Status = EJobStatus.Completed 

在这里,我们不难看出,这就是被分配到的工作状态是“已完成”从枚举“EJobStatus”的值。

我的个人偏好放在一边,如果你想遵循.NET的命名约定,那么没有前缀枚举。但最重要的是在给定的代码库中始终遵循相同的约定。

编辑:我刚才看到你也加了实际的枚举值的前缀,我们不这样做。我们总是以这种方式引用枚举ESomeEnum.SomeValue。在这种情况下,为实际的枚举值加前缀是没有用的。另外,我不认为为enum名称和枚举值使用相同的前缀是个好主意,因为它们不是同一个东西。

在VB.net中,我不相信你可以引用一个枚举值,而不需要使用enum的名称来表示它,所以用任何东西将枚举值的名称“加上”是完全多余的。

即你不能使用
暗淡X = enUTDSEW_Default

即使你想,你就必须使用:

 dim x = enUtilityTypeDetailStudentEntryWorkflow.enUTDSEW_Default 

这仅仅是愚蠢的。

+2

实际上,如果将Enum添加到Imports语句中,您可以直接引用enum值... – 2011-03-24 19:23:03

+0

我不知道这一点。谢谢!虽然,我想知道这是否会被视为最佳做法。我怀疑不会。 – DarinH 2011-03-28 15:39:33

+0

我不确定这是否是最佳做法。将Enum添加到Imports语句当然很奇怪,但同时它可以消除一些重复,例如“myObject.Color = Red”而不是“myObject.Color = Colors.Red” – 2011-03-28 16:14:03

enum前缀可能来自C++程序员。在C++中enum名字是不是值的完全限定名称的一部分:

class Class 
{ 
public: 
    enum Enum 
    { 
     Value1, 
     Value2 
    }; 
}; 

// Yes 
Class::Enum e = Class::Value1 

// No 
Class::Enum e = Class::Enum::Value1 

但.NET语法呼吁第二个版本。所以对于冗余值名称没有任何好处。