将枚举属性从一个类复制到另一个类

时间:2013-07-26 10:22:00

标签: c# .net

我有两个具有确切类型属性但具有不同属性名称的类。所以我想将每个属性复制到位于不同类中的相应属性。

例如

public class ClassOne
{
   public string Name {get; set;}
   public string Code {get; set;}
   public UserMode Mode {get; set;}
   public enum UserMode {A=1, B=2, C=3};
}

public class ClassTwo
{
   public string MyName {get; set;}
   public string MyCode {get; set;}
   public MyUserMode Mode {get; set;}
   public enum MyUserMode MyMode {AA=1, BB=2, CC=3};
}

由于这只是我的想法,我创建了Helper方法,它将ClassOne转换为ClassTwo,取得每个成员并复制它的值,如

public static ClassTwo(ClassOne one)
{
  var two = new ClassTwo()
  {
    MyName = one.Name,
    MyCode = one.Code,
    // how to copy enum value ??
  };
}

问题是:我如何使用姓名和代码复制枚举?

由于

2 个答案:

答案 0 :(得分:9)

只需将其转换为int,然后转换为新的枚举:

public static ClassTwo(ClassOne one)
{
  var two = new ClassTwo()
  {
    Name = one.Name,
    Code = one.Code,
    Mode = (ClassTwo.MyUserMode)((int)one.Mode);
  };
}

这假设两个枚举都具有完全相同的int值。

更安全的方法是使用Enum.IsDefined

public static ClassTwo(ClassOne one)
{
  var mode = (ClassTwo.MyUserMode)((int)one.Mode);
  if (!Enum.IsDefined(typeof(ClassTwo.MyUserMode), mode)
    throw new InvalidOperationException("Cannot map enums.");
  var two = new ClassTwo()
  {
    Name = one.Name,
    Code = one.Code,
    Mode = mode
  };
}

答案 1 :(得分:1)

您可以将值转换为int

MyMode = (MyUserMode)((int)one.UserMode)