编译器抱怨所丢失的命名空间是类
问题描述:
的,我有以下的名称:编译器抱怨所丢失的命名空间是类
// Generator.cs
namespace MRP
{
public class Generator
{
public enum ModeGeneration
{
ByRequest,
ByCommit
}
}
}
// CustomerOrderWrapper.cs
namespace MRP
{
class CustomerOrderWrapper
{
readonly ModeGeneration _mode;
}
}
为什么我收到的命名空间名称“ModeGeneration”找不到一个错误。这两个类都在MRP名称空间下,为什么编译器在'ModeGeneration'命名空间上抱怨?
答
再次阅读错误消息。它应该说类似“无法找到类或名称空间ModeGeneration”,并且它是正确的,没有名为ModeGeneration
的类/名称空间,也许你想要Generator.ModeGeneration
?
作为一个内部类,Generator.ModeGeneration
是整个类型名称,并且不能省略外部类的名字,因为你可以在C#中定义一些内部类具有相同的名称是这样的:
namespace Foo
{
class One
{
public class Bar { }
}
class Another
{
public class Bar { }
}
}
你可以看到Bar
不明确。您应该使用One.Bar
和Another.Bar
。
答
是的,它们在同一个命名空间中,但enum ModeGeneration
也在Generator
类中。因此,要么:
- 把
enum
的Generator
类外,并把它作为你
或
- 前缀
ModeGeneration
在CustomerOrderWrapper.cs与发电机 -Generator.ModeGeneration
答
这是因为你的枚举是在中定义的类。更改代码如下:
namespace MRP
{
class CustomerOrderWrapper
{
readonly Generator.ModeGeneration _mode;
}
}
答
有两种方法来解决这个问题
方法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;
}
}
我希望它能帮助你。
'class CustomerOrderWrapper:Generator'?可能需要在'CustomerOrderWrapper'中扩展'Generator'类以访问枚举。 –