C#:从另一个类访问Enum

Eli*_*eth 13 c# enums

我知道我可以将我的枚举放在类的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;需要使用的位置.


Rus*_*ail 6

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)

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

祝一切顺利

克里斯.

  • 当我使用已接受的解决方案时,我得到"接口无法声明类型"错误,但这非常有用! (3认同)

cdh*_*wie 5

是:

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)


Aar*_*ver 5

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

    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)

  • 我在使用此代码时得到的接口无法声明类型 (10认同)