静态类内的C#枚举类型作用域
我在一个公共类中有一个枚举,定义如下:静态类内的C#枚举类型作用域,c#,class,enums,scope,C#,Class,Enums,Scope,我在一个公共类中有一个枚举,定义如下: namespace NS1 { public class MyClass { public enum ModeEnum { Auto, Manual }; } } 我还有一个静态类,试图在其中使用此枚举类型(请注意,它们都属于同一名称空间): MyStaticClass将不会编译。编译器出现以下错误: 类型“NS1.MyStaticClass.MyClass.ModeEnum”中不存在类型名称“ModeEnum”
namespace NS1
{
public class MyClass
{
public enum ModeEnum { Auto, Manual };
}
}
我还有一个静态类,试图在其中使用此枚举类型(请注意,它们都属于同一名称空间):
MyStaticClass将不会编译。编译器出现以下错误:
类型“NS1.MyStaticClass.MyClass.ModeEnum”中不存在类型名称“ModeEnum”
如果我将模式的定义更改为以下内容:
public static ModeEnum mode = ModeEnum.Auto;
using namespace NS1;
...
...
NS1.MyClass.ModeEnum myMode = NS1.MyClass.ModeEnum.Auto;
我得到了一个稍微不同的错误:
找不到类型或命名空间名称“ModeEnum”(是否缺少using指令或程序集引用?)
有人知道我为什么会犯这个错误吗
第二个错误是我预料到的,因为在过去引用枚举类型时,我总是必须首先用类名,然后是枚举类型名来限定它
有人能告诉我为什么以及什么时候需要首先使用名称空间来限定事物吗
我试图弄明白,但坦率地说,我太忙了,不知道发生了什么。我只是简单地添加了名称空间名称:P
从您的错误消息中,您似乎有两个
MyClass
,而您没有告诉我们的一个在MyStaticClass
中
看起来你被嵌套类型弄糊涂了。除非有充分的理由,否则不要将类或枚举放在其他类中。将所有类和枚举直接放在名称空间下更容易
编辑:我只是在(问题的,而不是下面的)注释中看到,问题在于名称空间和其中的类型具有相同的名称。如果将示例代码放在新项目中,是否会失败?这对我来说很好…好主意。。。我现在就试试看。:)另外,仅供参考--
enum
不需要在类中定义。啊,因此可以在命名空间声明下方和类定义上方定义它?命名空间名称与类名相同吗?您的类名与枚举名相同吗?(是否存在与您的类名相同的名称空间,或与您的名称空间名称相同的类?)。很好的建议,可以解决问题!谢谢大家@JanTacci您可以在C中使用以下类型:类
,委托
,枚举
,接口
,以及结构
。它们中的每一个都可以在名称空间级别上定义,或者放在外部类(或外部结构)中。
<Class Name>.<Enum Name> myValue = <Class Name>.<Enum Name>.<Enum Value>
<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;