0

いくつかのプロパティ (主に文字列と整数) を含む相互クラス A から派生した 2 つのクラスがあります。クラス B は、追加のプロパティを含む別のクラスです。より正確に、

public class A1 : A {
    private B _bee;
    public B Bee {
        get { return _bee;}
        set { _bee = value;}
    }
}

public class A2 : A {
    private List<B> _beeList;
    public List<B> BeeList {
        get { return _beeList;}
        set { _beeList = value;}
    }
}

ここで、A1 のインスタンスが与えられた場合、同じ情報 (つまり、「A」部分のプロパティと「B」のインスタンス) を含む A2 のインスタンスを作成するにはどうすればよいでしょうか。私は次のことを試しました-うまくいくことを望みましたが、うまくいかないことを知っていました...-(A1とA2のインスタンスを「1」と「2」で呼びましょう):

A _a = (A)one; // This obv works
B _b = one.Bee; 

A2 _a2 = (A2)_a; // Threw away the Bee - information, so should work imo
_a2.BeeList.Add(_b);

では、A のすべてのプロパティを手動で入力せずにこれを行うにはどうすればよいでしょうか。

4

3 に答える 3

2
 using System.Reflection;  

  private void Convert(A1 _a1, A2 _a2)
    {
        foreach(PropertyInfo pi in typeof(A).GetProperties())
        {
            pi.SetValue(_a2,
                pi.GetValue(_a1, null)
                            , null);
        }
        _a2.BeeList.Add(_a1.Bee);
    }

これは私のために働くように見えました

于 2013-01-10T11:16:15.847 に答える
2

automapperを使用してみてください。

automapper を使用すると、多くのコードを記述することなく、クラスのプロパティを別のクラスにコピーできます。

元:

Mapper.CreateMap<X, Y>();    
Y y = Mapper.Map<X, Y>(x);
于 2013-01-10T11:01:28.333 に答える
1

Automapperの構成は次のようになります。

Mapper.CreateMap<A1, A2>()
      .ForMember(a2 => a2.BeeList, ctx => ctx.MapFrom(a1 => new List<B>{a1.Bee}));

A a1Object = new A1{Bee = new B()};

A2 a2Object = Mapper.Map<A2>(a1Object);
于 2013-01-10T11:11:17.990 に答える