C#:从另一个类访问Enum

时间:2010-12-14 20:42:44

标签: c# enums

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

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

我想要的是从

访问此枚举
public class1
{
   var class2 = new class2();
   // Set the Mode
   class2.Mode = Model.Selected
}

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

7 个答案:

答案 0 :(得分:18)

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

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

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

答案 1 :(得分: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
    } 
}

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

所有最好的

克里斯。

答案 2 :(得分:5)

是:

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;

答案 3 :(得分: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.
        }
    }

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

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

答案 4 :(得分:1)

我最终通过将其更改为使用Intellisense找到的名称空间访问器解决了我的问题。我以为枚举是在类中,而不仅仅是名称空间。如果在课堂上,我建议将其移出课堂。

namespace ABC.XYZ.Contracts
{
  public class ChangeOrder : BaseEntity, IAuditable
  {
     ...
  }

  public enum ContractorSignatureType
  {
    A,
    B,
    V
  }
}

ContractorSignatureType = Contracts.ContractorSignatureType.B,

答案 5 :(得分:0)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;

    namespace @enum
    {
        class temp
        {
           public enum names
            {
                mohitt,
                keval,
               Harshal,
               nikk
            }

        }


        class Program
        {

            static void Main(string[] args)
            {

                Console.WriteLine((int)temp.names.nikk);
                Console.ReadKey();

            }
        }
    }

答案 6 :(得分:0)

//by using this you can access the value of enum.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace @enum
{
    class temp
    {
       public enum names
        {
            mohitt,
            keval,
           Harshal,
           nikk
        }

    }
    class Program
    {

        static void Main(string[] args)
        {

            Console.WriteLine(temp.names.nikk);
            Console.ReadKey();

        }
    }
}