1

リストを別のリストにコピーする方法

クラス x とクラス y は両方ともいくつかの共通のプロパティを持ち、共通のプロパティを別のリストにコピーしたい、x を y と仮定する

2 つのリスト 1 を使用して、1 つのリスト コンテンツを別のリスト コンテンツにコピーします。次の構文を使用して、リストをリスト アイテムにコピーします。

List<SomeType2> list1 = new List<SomeType2>();
List<SomeType> list2 = new List<SomeType>();

// This will copy all the items from list 1 to list 2
list1.ForEach(i => list2.Add(i));

しかし、私の list1 は list2 と同じではなく、上記の構文が同じタイプの場合、完全に機能します。

私のリストは同じではないので、コピーには以下の構文を使用する必要があります

List<Y> y = new List<Y>(x.ConvertAll<Y>(e => { return new Y { Id = e.Id, Name = e.Name }; }));

しかし、静的な「Id = e.Id、Name = e.Name」を使用したくありません。このプロセスを複数のリスト(プロパティが異なる)で数回使用する必要があるため、できる一般的なことを書く方が良いでしょう私のためにそれをしてください。

ご不明な点がございましたら、お問い合わせください。

4

5 に答える 5

1

AutoMapperの使用を検討してください。まさにこれを行うために考案されました。

于 2013-04-15T09:39:59.613 に答える
1

同じ名前のプロパティをマップする場合は、Automapper (NuGet から入手可能) などを使用すると、自動的にマップされます。アプリケーションの開始時にどこかにマッピングを追加します。

Mapper.CreateMap<Source, Destination>();

デフォルトのマッピングは、同じ名前のプロパティのマッピングを提供します。したがって、単純にリストをマップします。

List<Source> list1 = new List<Source>();
List<Destination> list2 = Mapper.Map<List<Destination>>(list1);
于 2013-04-15T09:40:21.897 に答える
1

反射を使用できます

static T2 Copy<T1, T2>(T1 from)
{
    T2 to = Activator.CreateInstance<T2>();
    Type toType = typeof(T2);

    foreach (var p in from.GetType().GetProperties())
    {
        var prop = toType.GetProperty(p.Name);
        if (prop != null)
            prop.SetValue(to, p.GetValue(from,null),null);
    }

    return to;
}

SomeType2 t2 = Copy<SomeType1,SomeType2>(new SomeType1(){/*....*/});
于 2013-04-15T09:44:01.463 に答える
0

使うだけ.select

List<y> = oldList.select(x=> new y{prop1 = x.prop1}).ToList();
于 2013-04-15T09:40:26.583 に答える
0

interface共通のプロパティがある場合は、おそらく、または基本クラスにあるはずです。

于 2013-04-15T09:40:59.523 に答える