我的遗留代码包含:
if (chgList != ABCHeader.ChangeListTypes.Always)
这是ABCHeader - 它是一个类(不是变量),并且是一个非静态类:
public class ABCHeader
{
. . .
public enum ChangeListTypes
{
...
}
chgList以这种方式定义:
private ABCHeader.ChangeListTypes chgList = ABCHeader.ChangeListTypes.Always;
这很明显可以编译,但这种非静态类(ABCHeader)以这种方式引用似乎并不合适。因为我在这段代码中的某个地方有一个奇怪的Null引用异常,查看代码我偶然发现了这个。这是一个潜在的问题,还是我肯定会咆哮错误的树?
答案 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"