编译器抱怨缺少名称空间,这是类

时间:2017-06-15 06:01:02

标签: c# enums namespaces

我有以下内容:

// Generator.cs
namespace MRP
{
    public class Generator
    {
        public enum ModeGeneration
        {
            ByRequest,
            ByCommit
        }
    }
}

// CustomerOrderWrapper.cs
namespace MRP
{
    class CustomerOrderWrapper
    {
        readonly ModeGeneration _mode;
    }
}

为什么我收到名称空间名称' ModeGeneration'无法找到。这两个类都在MRP命名空间下,为什么编译器抱怨' ModeGeneration'命名空间?

4 个答案:

答案 0 :(得分:2)

再次阅读错误消息。它应该说“找不到类或命名空间ModeGeneration”,这是正确的,没有名为ModeGeneration的类/命名空间,也许你想要Generator.ModeGeneration

作为一个内部类,Generator.ModeGeneration是整个类型的名称,你不能省略外部类名,因为你可以在C#中定义一些具有相同名称的内部类,如下所示:

namespace Foo
{
    class One
    {
        public class Bar { }
    }

    class Another
    {
        public class Bar { }
    }
}

您可以看到Bar含糊不清。您应该使用One.BarAnother.Bar代替。

答案 1 :(得分:1)

是的,它们位于同一名称空间中,但enum ModeGeneration也位于Generator类内。所以:

  • enum放在Generator课程之外并按原样使用

  • 带有生成器的CustomerOrderWrapper.cs中的前缀ModeGeneration - Generator.ModeGeneration

答案 2 :(得分:1)

这是因为你的枚举是在课堂上定义的。更改代码如下:

namespace MRP
{
    class CustomerOrderWrapper
    {
        readonly Generator.ModeGeneration _mode;
    }
}

答案 3 :(得分:1)

有两种方法可以解决这个问题

方法1)您可以使用枚举前面的类名

namespace MRP
{
    public class Generator
    {
        public enum ModeGeneration
        {
            ByRequest,
            ByCommit
        }
    }
}

// CustomerOrderWrapper.cs
namespace MRP
{
    class CustomerOrderWrapper
    {
        readonly Generator.ModeGeneration _mode;
    }
}

方法2)您可以将类中的枚举带到命名空间

namespace MRP
{
public enum ModeGeneration
        {
            ByRequest,
            ByCommit
        }
    public class Generator
    {

    }
}

// CustomerOrderWrapper.cs
namespace MRP
{
    class CustomerOrderWrapper
    {
        readonly ModeGeneration _mode;
    }
}

我希望它会对你有所帮助。