2017-10-24 9 views
0

あるリストのフィールドに別のリストの値を設定しようとしています。新しいリストでArgument Out of Range例外を回避する方法を考え出すのに問題があります。私は新しいリストのサイズをmyObjectA.Countに初期化しようとしましたが、実際に配列のようにそのサイズのリストを初期化するわけではないことをお読みください。私はちょっと立ち往生し、援助を望んでいた。おかげ新しいリストオブジェクトの値を既存のリストの値に設定する

List<objectA> myObjectA =_GetList(id); 
List<objectB> myObjectB = new List<objectB>(); 


for (var i=0; i < myObjectA.Count; i++) 
{ 
     myObjectB[i].Comments = myObjectA[i].Comments; 
} 
+0

実際に 'myObjectB'リストに' ObjectB'を追加していますか? 'myObjectB'の上にあるあなたのコードスニペットでは、 – Deolus

答えて

2

myObjectBので。あなたは1つの以上のアイテムを持っている可能性があり、ループの最初の繰り返しで、それはそこにはアイテムがmyObjectBリストにありません、あなたがしているので、クラッシュしますどの

myObjectB[0].Comments = myObjectA[0].Comments; 

のようなコードを実行しようとします myObjectAリストをループしています最初のアイテム(0番目のインデックス)にアクセスしようとしているため、範囲外の例外が発生します。具体的には インデックスが範囲外です。負でなく、コレクションのサイズより小さくなければなりません。 objectBobjectAの両方を想定し例外

は、同じタイプのComments性質を持っている、あなたはmyObjectAリストを、各項目についてループすることができ、新しいobjectBオブジェクトを作成し、(元々は空のリストとしてinitalizedた)リストに追加Addメソッドを使用します。

List<objectB> myObjectB = new List<objectB>(); 
for (var i=0; i < myObjectA.Count; i++) 
{ 
    var b = new objectB(); //create the object 
    b.Comments = myObjectA[i].Comments; // map the property values 
    myObjectB.Add(b); //add the object to the list 
} 

上記foreachのコードは、LINQの突起と、ワンライナーにすることができる

var bList = myObjectA.Select(x => new objectB { Comments = x.Comments }).ToList(); 

変数bListobjectBオブジェクトのリストであろう。

+1

恐ろしい!出来た。どうもありがとう。 – Rich

2

あなたはこのように行うことができます。

for (var i = 0; i < myObjectA.Count; i++) 
{ 
     myObjectB.Add(new objectB() 
     { 
      Comments = myObjectA[i].Comments 
     }); 
} 

この方法で、各反復でそれがmyObjectBリストにobjectB新しい追加します。

Linqでは、あなたのコードを短くすることができます。空のリストある

myObjectB = myObjectA.Select(x => new objectB { Comments = x.Comments }).ToList(); 
+1

もうまくいきました。私は答えとして両方をマークすることを願っています。 :) – Rich

関連する問題