5

我在 2 个不同的对象中有 2 个枚举。我想将enumin 对象 #1 设置为等于enumin 对象 #2。

这是我的对象:

namespace MVC1 {

    public enum MyEnum {
        firstName,
        lastName
      }

   public class Obj1{
        public MyEnum enum1;
    }
   }


     namespace MVC2 {

    public enum MyEnum {
        firstName,
        lastName
      }

    public class Obj2{
        public MyEnum enum1;
      }
    }

我想这样做,但这不会编译:

 MVC1.Obj1 obj1 = new MVC1.Obj1();
 MVC2.Obj2 obj2 = new MVC2.Obj2();
 obj1.enum1 = obj2.enum1; //I know this won't work.

如何将 Obj1 中的枚举设置为 Obj2 中的枚举?谢谢

4

3 回答 3

7

假设您保持它们相同,您可以转换为/从 int:

obj1.enum1 = (MVC1.MyEnum)((int)obj2.enum1);
于 2012-06-05T14:47:59.290 回答
7

枚举具有底层整数类型,默认为 int (System.Int32),但您也可以使用“enum MyEnum : type ”显式指定它。

因为您在两个不同的命名空间中工作,所以 Enum 类型本质上是不同的,但是因为它们的基础类型是相同的,所以您可以将它们强制转换:

obj1.enum1 = (MVC1.MyEnum) obj2.enum1;

注意:在 C# 中,即使没有任何参数,也必须使用括号进行函数调用。您应该将它们添加到构造函数调用中。

于 2012-06-05T14:49:47.947 回答
2

最好的方法是使用Enum.IsDefined检查它是否在范围内:

int one = (int)obj2.enum1;
if (Enum.IsDefined(typeof(MVC1.MyEnum), one )) { 
  obj1.enum1 = (MVC1.MyEnum)one;
}

 obj1.enum1 = (MVC1.MyEnum) Enum.Parse(typeof(MVC1.MyEnum),
                                 ((int)obj2.enum1).ToString());

或者

int one = (int)obj2.enum1;  
obj1.enum1 = (MVC1.MyEnum)one; 
于 2012-06-05T14:48:52.293 回答