开发者

Any advantage to prefixing Enum values?

In this post Jon Skeet pointed o开发者_Go百科ut that the following code should be changed to conform with the .NET naming conventions. Doing that would also decrease the amount of noise in the code.

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

I must admit, I was pretty much like a sheep and was following what others have done before me. I thought the prefix did not look right and then to have it twice did not make sense either. After looking at a couple of .NET Framework examples, it looks like this would be closer to the standard.

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

Am I on the mark with using these names?

Any other suggestions or comments in general?


Where I work we also use a prefix for enums (E in our case), and I must say that I like it. It makes it very easy to spot an Enum and differentiate it from a class or variable. Here's an example from our codebase:

myJob.Status = EJobStatus.Completed

Here we can easily see that the status that's been assigned to the job is the value "Completed" from the enum "EJobStatus".

My personal preference aside, if you want to follow the .NET naming conventions, then there is no prefix to enums. But the most important of all is to always follow the same conventions in a given code base.

Edit: I just saw that you also prefix the actual enum values, we don't do that though. We always refer enums this way ESomeEnum.SomeValue. In that case it's not useful to prefix the actual enum value. Also, I don't think it's a good idea to use the same prefix for the enum name and the enum values, because they're not the same thing.


I don't know about standard, but using Hungarian notation on enums and enum values is not something I have seen before.

Your second example is closer to the kind of code I normally see, so in that respect, yes, it is more standard.

See section 8.2.3 on this guideline - pascal casing and no prefix/postfix.

Guideline 16 of Section 2.1 of Lance Hunt's C# coding standards also says to avoid prefixes and postfixes.

I would say this is pretty universal - the point of having enums it to aid readability. Using prefixes and postfixed reduces readability and thus is pretty universally discouraged.


In VB.net, I don't believe you can refer to an enum value without prefacing it with the name of the enum, so it's completely redundant to "prefix" the enum value name with anything.

ie, you couldn't use
dim x = enUTDSEW_Default

even if you wanted to, you'd have to use:

        dim x = enUtilityTypeDetailStudentEntryWorkflow.enUTDSEW_Default

which is just silly.


The enum prefix probably came from a C++ programmer. In C++ the enum name isn't part of the value's fully qualified name:

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

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

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

but .NET syntax calls for the second version. So there's no benefit to a redundant value name.


I do it in C# to avoid the compiler issue of having the property name the same as its (enum) type, which I've found I'd liked to do in the past.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜