繁体   English   中英

C#:从另一个类访问枚举

[英]C#: Access Enum from another class

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

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

我想要的是从

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

如果不使用命名空间区域,这以某种方式可能吗?

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

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

然后你可以using MyNamespace;添加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
    } 
}

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

祝一切顺利

克里斯。

是:

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;

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

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

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

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

  public enum ContractorSignatureType
  {
    A,
    B,
    V
  }
}

ContractorSignatureType = Contracts.ContractorSignatureType.B,

    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();

            }
        }
    }
//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();

        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM