2

我的遗留代码有这个:

if (chgList != ABCHeader.ChangeListTypes.Always)

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

public class ABCHeader
{
    . . .

     public enum ChangeListTypes
     {
    ...
     }

chgList 是这样定义的:

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

这显然可以编译,但对我来说,以这种方式引用这个非静态类(ABCHeader)似乎不正确。因为我在这段代码的某处有一个奇怪的空引用异常,所以我翻阅了我偶然发现的代码。这是一个潜在的问题,还是我肯定找错了树?

4

3 回答 3

3

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

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

于 2013-04-09T21:00:35.047 回答
3

以这种方式引用枚举是非常好的——你不能从中获得空引用异常。

于 2013-04-09T21:00:44.617 回答
3

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

这种周期永远不会导致NullReferenceException实例成员访问周期的方式。

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

string typeString = typeof(ABCHeader.ChangeListTypes).ToString();
    // will contain a name including "ABCHeader+ChangeListTypes"
于 2013-04-09T21:10:43.660 回答