独自のプロパティ(位置、速度など)を持つパーティクルと呼ばれるオブジェクトがあり、ウィンドウフォームでパーティクルのリストを作成します。次に、このパーティクルのリストがコードで更新されます(つまり、各パーティクルの位置、速度などが各反復ステップで更新されます)。
私がやりたいのは、これList<Particle>
を反復ごとに別のリストに追加してList<List<Particle>>
(ボタンをクリックした後)、比較できる粒子の個別のリストを作成できるようにすることです。
これは私のコードがどのように見えるかです(UpdateEngineは、初期化メソッドでパーティクルのリストを作成し、リスト内のパーティクルの値を更新する他のメソッドを持っているクラスです):
public partial class frmMain : Form
{
private List<List<Particle>> listPlist;
private UpdateEngine Engine;
...
public frmMain()
{
InitializeComponent();
listPlist = new List<List<Particle>>();
Engine = new UpdateEngine();
}
...
//pressing this button iterates through a specified number of iterations
private void btPrep_Click(object sender, EventArgs e)
{
//create the particles and add the first list to the list of lists
Engine.Initialize();
listPlist.Add(Engine.ParticleList);
//iterate through the list of particles in Engine and update their properties
for(i = 0; i <= iterations; i++)
{
Engine.Update();
listPlist.Add(Engine.ParticleList);
}
}
}
私が起こっているのは、反復がうまくいく前に最初のリストが追加されていることです。forループに追加された最初のリストは正常に追加されます。その後に追加されたすべてのリストは、listPlist内のすべてのリストを現在のリストと同一になるように変更します。
コードを実行したときに表示される例:
初期化後:
- listPlist(0)> Particle(0)> Position = 0,0
最初の反復後:
- listPlist(0)> Particle(0)> Position = 0,0
- listPlist(1)> Particle(0)> Position = 1,1
次の反復後:
- listPlist(0)> Particle(0)> Position = 2,2
- listPlist(1)> Particle(0)> Position = 2,2
- listPlist(2)> Particle(0)> Position = 2,2
これを修正する方法がよくわかりません。なぜこれが起こっているのか誰かが知っていますか?