我的旧代码具有以下内容:

if (chgList != ABCHeader.ChangeListTypes.Always)


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

public class ABCHeader
{
    . . .

     public enum ChangeListTypes
     {
    ...
     }


chgList是这样定义的:

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


这显然可以编译,但是在我看来,以这种方式引用此非静态类(ABCHeader)并不正确。当我在这段代码中的某个地方遇到一个奇怪的Null Reference Exception时,翻阅了我偶然发现的代码。这是潜在的问题,还是我肯定是在树错误的树上吠叫?

最佳答案

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

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

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

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

10-08 08:40