2

正確なタイプ プロパティを持つ 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};
}

これは私の頭に浮かぶだけなので、すべてのメンバーを取得して 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 に答える