2

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

例如

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

问题是:如何像上面使用名称和代码一样复制枚举?

谢谢

4

2 回答 2

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
  };
}
于 2013-07-26T10:24:02.197 回答
2

您可以将值转换为 int

MyMode = (MyUserMode)((int)one.UserMode)
于 2013-07-26T10:26:18.677 回答