それはできません。リストに追加するたびに新しいオブジェクトを作成する必要があります。そうしないと、古いオブジェクトを変更し続けることになります。
リストに参照型を追加するときは、参照reference
されているオブジェクトではなく、をリストに追加するだけであることに注意してください。これは、常に同じインスタンスをプッシュする場合、リスト内のすべての「アイテム」が実際には同じアイテムであることを意味します。検討:
newSaveData 1000
+-----------+ +--------------------+
| 1000 |--------------------->| save_property1 |
+-----------+ | save_property2 |
+--------------------+
newSaveDataList ^
+-----------+ |
| 1000 |---------------------------------+
+-----------+ |
| 1000 |---------------------------------+
+-----------+ |
| 1000 |---------------------------------+
+-----------+ |
| 1000 |---------------------------------+
+-----------+
したがって、代わりに、リストに追加するたびにオブジェクトの新しいインスタンスを作成する必要があります。これにより、それらはすべて異なる可能性のある別個のオブジェクトになります。
while (yourLoopCondition)
{
// each item you want to add, create a new instance.
newSaveData = new SaveData();
if (someCondition1)
{
newSaveData.save_property1 = x
}
if (someCondition2)
{
newSaveData.save_property2 = y
newSaveDataList.Add(newSaveData);
}
}
上記は、各オブジェクトが別個のものであり、ループの複数の反復にわたる「飛行中のオブジェクト」ではないことを前提としています。
ここで、メインオブジェクトが1つあり、そのオブジェクトの「スナップショット」をリストに追加しようとしている場合は、ある種のクローン作成メソッドまたはある種の「コピーコンストラクター」を使用してこれを行うことができます。
public class SaveData
{
public double save_property1;
public double save_property2;
public SaveData(SaveData other)
{
save_property1 = other.save_proerty1;
save_property2 = other.save_property2;
}
}
次に、飛行中のオブジェクトのリストにを追加したい場合はsnapshot
、次のようにすることができます。
newSaveDataList.Add(new SaveData(newSaveData));
または、代わりに値型を使用してリストにコピーを配置することもできますが、興味深い癖がたくさんあるため、使用する前にそれらを慎重に検討する必要があります。このトピックに関する投稿がここにありますstruct
struct