这是一种访问枚举的安全方法吗?

时间:2013-04-09 20:58:42

标签: c# class static enums instantiation

我的遗留代码包含:

if (chgList != ABCHeader.ChangeListTypes.Always)

这是ABCHeader - 它是一个类(不是变量),并且是一个非静态类:

public class ABCHeader
{
    . . .

     public enum ChangeListTypes
     {
    ...
     }

chgList以这种方式定义:

private ABCHeader.ChangeListTypes chgList = ABCHeader.ChangeListTypes.Always;

这很明显可以编译,但这种非静态类(ABCHeader)以这种方式引用似乎并不合适。因为我在这段代码中的某个地方有一个奇怪的Null引用异常,查看代码我偶然发现了这个。这是一个潜在的问题,还是我肯定会咆哮错误的树?

3 个答案:

答案 0 :(得分:3)

这没有错。您可以通过类名访问类中的嵌套枚举。

现在,我说,我更喜欢将我的枚举放在顶层,而不是嵌套在类中,但如果你想要这样做,那就是它的合适语法。

答案 1 :(得分:3)

以这种方式引用枚举是完全没问题的 - 你不能从中获得空引用异常。

答案 2 :(得分:3)

这只是嵌套类型class(静态和非静态)或struct可以包含其中的另一种类型。句点.是“静态成员”访问。这很像你调用静态方法的时期,比如ABCHeader.SomeMethod();

这种时期永远不会导致实例成员访问期间的NullReferenceException

请注意,.NET Framework使用加号+而不是句点.来表示嵌套类型。例如:

string typeString = typeof(ABCHeader.ChangeListTypes).ToString();
    // will contain a name including "ABCHeader+ChangeListTypes"