0

我在一个公共类中有一个枚举,定义如下:

namespace NS1
{
    public class MyClass
    {
        public enum ModeEnum { Auto, Manual };
    }
}

我还有一个静态类,我试图在其中使用这个枚举类型(注意它们都属于同一个命名空间):

namespace NS1
{
    public static class MyStaticClass
    {
        public static MyClass.ModeEnum mode = MyClass.ModeEnum.Auto;
    }
}

MyStaticClass不会编译。编译器给出以下错误:

“NS1.MyStaticClass.MyClass.ModeEnum”类型中不存在类型名称“ModeEnum”

如果我将模式的定义更改为以下内容:

public static ModeEnum mode = ModeEnum.Auto;

我得到一个稍微不同的错误:

找不到类型或命名空间名称“ModeEnum”(您是否缺少 using 指令或程序集引用?)

有谁知道我为什么会收到这个错误?

这第二个错误我有点预料到,因为在过去引用枚举类型时,我总是必须先用名限定它,然后是枚举类型名

<Class Name>.<Enum Name> myValue = <Class Name>.<Enum Name>.<Enum Value>

这带来了另一个我一直想问的问题。有时当我声明一个枚举类型的变量时,我也必须添加命名空间名称,即使我的类有正确的using语句。例如:

<Namespace Name>.<Class Name>.<Enum Name> myValue = <Namespace Name>.<Class Name>.<Enum Name>.<Enum Value>

这会导致一些看起来很奇怪的变量声明。例如,在我的一个类中,我有一个枚举变量,如下所示:

using namespace NS1;
...
...
NS1.MyClass.ModeEnum myMode = NS1.MyClass.ModeEnum.Auto;

谁能向我指出为什么以及何时需要首先使用命名空间来限定事物?

我试图弄清楚,但坦率地说,我太忙了,无法了解发生了什么。我只是简单地添加了命名空间名称。:P

4

1 回答 1

1

从您的错误消息看来,您有两个 MyClass,而您没有告诉我们的一个在里面 MyStaticClass

看起来你被嵌套类型弄糊涂了。除非你有充分的理由,否则不要将类或枚举放在其他类中。将所有类和枚举直接放在命名空间下会更容易。

编辑:我只是在评论(问题,而不是下面)中看到问题是名称空间和其中的类型具有相同的名称。

于 2012-08-21T21:27:24.570 回答