2017-06-15 86 views
0

的,我有以下的名称:编译器抱怨所丢失的命名空间是类

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

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

为什么我收到的命名空间名称“ModeGeneration”找不到一个错误。这两个类都在MRP名称空间下,为什么编译器在'ModeGeneration'命名空间上抱怨?

+0

'class CustomerOrderWrapper:Generator'?可能需要在'CustomerOrderWrapper'中扩展'Generator'类以访问枚举。 –

回答

2

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

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

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

    class Another 
    { 
     public class Bar { } 
    } 
} 

你可以看到Bar不明确。您应该使用One.BarAnother.Bar

+0

你是说在我上面的例子中,enum是在类内类似于在这个上下文中有类内的类吗?如果我有一个属性而不是枚举,我不会收到编译错误。 – ehh

+0

这不是一个有问题的问题,它没有被发现,因为枚举是在类中定义的(不知道它是整数还是小数)。罗马和阿布舍克说得对。 – bradbury9

+0

@ bradbury9我在解释“他们为什么要这样设计”,或者说“为什么外部类名不能省略”。 –

1

是的,它们在同一个命名空间中,但enum ModeGeneration也在Generator类中。因此,要么:

  • enumGenerator类外,并把它作为你

  • 前缀ModeGeneration在CustomerOrderWrapper.cs与发电机 - Generator.ModeGeneration
1

这是因为你的枚举是在中定义的类。更改代码如下:

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

有两种方法来解决这个问题

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

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

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

方法2),您可以将enum从课堂上拉出来命名空间

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

    } 
} 

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

我希望它能帮助你。