我知道我可以将我的枚举放在类的Namespace区域,这样每个人都可以在同一名称空间中访问它.
// defined in class2
public enum Mode { Selected, New, }
Run Code Online (Sandbox Code Playgroud)
我想要的是从中访问此枚举
public class1
{
var class2 = new class2();
// Set the Mode
class2.Mode = Model.Selected
}
Run Code Online (Sandbox Code Playgroud)
如果不使用命名空间区域,这是否可行?
Mar*_*ius 19
您可以在类之外声明枚举:
namespace MyNamespace
{
public enum MyEnum
{
Entry1,
Entry2,
}
}
Run Code Online (Sandbox Code Playgroud)
然后您可以添加using MyNamespace;
需要使用的位置.
Aaron的答案非常好,但我相信还有更好的方法:
public static class class1
{
public void Run()
{
class2.Mode mode = class2.Mode.Selected;
if (mode == class2.Mode.Selected)
{
// Do something crazy here...
}
}
}
public static class class2
{
public enum Mode
{
Selected,
New
}
}
Run Code Online (Sandbox Code Playgroud)
没有必要使这复杂化.这是一项简单的任务.
祝一切顺利
克里斯.
是:
class2.Mode = class2.Mode.Selected
Run Code Online (Sandbox Code Playgroud)
但请注意,您不能定义与外部类成员之一具有相同名称的嵌套类型,因此此代码将无法编译.枚举或属性需要以其他名称命名.您的类名和变量名也会发生冲突,使其更加复杂.
为了使这个更通用的答案,如果你有这个:
public class Foo
{
public SomeEnum SomeProperty { get; set; }
public enum SomeEnum {
Hello, World
}
}
Run Code Online (Sandbox Code Playgroud)
然后,此代码将为属性分配枚举值:
Foo foo = new Foo();
foo.SomeProperty = Foo.SomeEnum.Hello;
Run Code Online (Sandbox Code Playgroud)
如果您正在尝试执行下面描述的操作,它将无法正常工作......
public class MyClass1
{
private enum Mode { New, Selected };
public Mode ModeProperty { get; set; }
}
public class MyClass2
{
public MyClass2()
{
var myClass1 = new MyClass1();
//this will not work due to protection level
myClass1.ModeProperty = MyClass1.Mode.
}
}
Run Code Online (Sandbox Code Playgroud)
你可以做的是下面,这将工作...
public interface IEnums
{
public enum Mode { New, Selected };
}
public class MyClass1
{
public IEnums.Mode ModeProperty { get; set; }
}
public class MyClass2
{
public MyClass2()
{
var myClass1 = new MyClass1();
//this will work
myClass1.ModeProperty = IEnums.Mode.New;
}
}
Run Code Online (Sandbox Code Playgroud)