C#:从另一个类访问Enum

我知道我可以将我的枚举放在类的Namespace区域,这样每个人都可以在同一名称空间中访问它。

// defined in class2 public enum Mode { Selected, New, } 

我想要的是从中访问此枚举

 public class1 { var class2 = new class2(); // Set the Mode class2.Mode = Model.Selected } 

在不使用命名空间区域的情况下这是否可行?

如果您尝试执行下面描述的操作,它将无法正常工作……

  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. } } 

你可以做的是下面的,这将有效…

  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; } } 

您可以在类之外声明枚举:

 namespace MyNamespace { public enum MyEnum { Entry1, Entry2, } } 

然后你可以using MyNamespace;添加using MyNamespace; 需要使用的地方。

是:

 class2.Mode = class2.Mode.Selected 

但请注意,您不能定义与外部类成员之一具有相同名称的嵌套类型,因此此代码将无法编译。 枚举或属性需要以其他名称命名。 您的类名和变量名也会发生冲突,使其更加复杂。

为了使这个更通用的答案,如果你有这个:

 public class Foo { public SomeEnum SomeProperty { get; set; } public enum SomeEnum { Hello, World } } 

然后,此代码将为属性分配枚举值:

 Foo foo = new Foo(); foo.SomeProperty = Foo.SomeEnum.Hello; 

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 } } 

没有必要使这复杂化。 这是一项简单的任务。

祝一切顺利

克里斯。