2017-07-13 12 views
1

私はコピーする必要があるList<dynamic>を持っていますし、リストの行の条件に基づいて、その行のフィールドを変更して2番目のリストに追加する必要があります。C#copyリスト<dynamic>参照なし

このコードのサンプル:

//list1 is a `List<dynamic>` that I get from a query using Dapper. I guess it is an ExpandoObject list 

var list2 = new List<dynamic>(list1); 

foreach (var obj in list2) 
{ 
    if (obj.condition == 1) 
    { 
     var newObj = obj; 
     newObj.description = "new row"; 
     list2.Add(newObj); 
    } 
} 

私の問題は、両方の私のリストには、リスト内のobjは文字列「新しい行」で更新されていることです。

変更するたびに、newObjの両方のリストが更新されるようです。

私もlist2この方法を作成しようとしましたが、私は同じ問題があります:私は他の質問に見えたが、私の場合には、私だけdynamicリストを持っている

:EDIT

var list2 = new BindingList<dynamic>(list1); 

を。 Classを作成せずにICloneableを実装しなくても、私が望む結果を得ることは可能ですか?

+0

はICloneableを実装し、呼び出してみ 'VAR LIST2 = list1.Select(I => i.Clone())。ToListメソッド()'、おそらく。 – Casey

+0

しかし、実装では、opにはほぼ同じコードを書く必要があります –

+0

2つの異なるリストがありますが、これらのリスト内の*要素*は同じなので、リスト内の要素のいずれかを変更すると、よく – HimBromBeere

答えて

-1

var list2 = list1.Select(x => x); 
+0

私はそれを試みましたが、それは私に同じ結果を与えます。両方のリストが更新されます。 – SilentRage47

+0

@ SilentRage47は、あなたが 'list.Add(newObj)'と答えたときに追加します – praty

+0

list2、私はコードサンプルを修正しました。 – SilentRage47

関連する問題