C# 将一个枚举设置为另一个枚举

C# 将一个枚举设置为另一个枚举,c#,.net,enums,C#,.net,Enums,我在两个不同的对象中有两个枚举。我想将对象1中的enum设置为对象2中的enum 以下是我的物品: namespace MVC1 { public enum MyEnum { firstName, lastName } public class Obj1{ public MyEnum enum1; } } namespace MVC2 { public enum MyEnum {

我在两个不同的对象中有两个枚举。我想将对象1中的
enum
设置为对象2中的
enum

以下是我的物品:

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中的枚举?谢谢

假设它们保持不变,您可以向int/from int转换:

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

最好的方法是使用以下工具检查其是否在范围内:



枚举有一个基础整数类型,默认情况下是int(System.Int32),但您也可以使用“enum MyEnum:type”显式指定它

由于您在两个不同的名称空间中工作,枚举类型本质上是不同的,但由于它们的基础类型相同,您可以强制转换它们:

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

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

这里的基础类型(甚至枚举值)完全相同。这种方法在大型项目中会造成大量性能损失。(获取类型、强制转换、转换为字符串和解析)@lesderid-但我认为最好先检查一下……如果需求像您所说的那样,我已经添加了其他方法……我指的是“最安全的方法”。铸造时永远不会有问题,只有值可能是意外的。这就是为什么在这种情况下,您不应该首先强制转换枚举,应该只有一个枚举,而不是两个成员完全相同的枚举。如果您无法控制枚举或不相信它们会得到维护(或者您有一些值可转换,而有些值不可转换),那么这肯定是一种安全的方法。但是,如果你有控制权,你也可以编写一个快速的单元测试,以确保在两个枚举中保持相同的值,并接受直接转换的性能/简单性提升。嘿,我不知道你可以像那样直接转换枚举。我总是转换成/从他们的基本类型!每天学点新东西。:)+1我必须说我也不确定,但你刚刚证实了这一点DI也不确定,所以我必须快速编写脚本并检查值:你为什么有两个相同值的枚举?删除其中一个的定义,并在使用它的任何地方用另一个替换它。
 obj1.enum1 = (MVC1.MyEnum) Enum.Parse(typeof(MVC1.MyEnum),
                                 ((int)obj2.enum1).ToString());
int one = (int)obj2.enum1;  
obj1.enum1 = (MVC1.MyEnum)one; 
obj1.enum1 = (MVC1.MyEnum) obj2.enum1;