ページ 1 / 1
C#のListジェネリック
Posted: 2013年7月09日(火) 21:43
by エルエン
コード:
[DataContract]
public class Area
{
[DataMember (Name ="エリアID")]
public int areaID { get; set; }
}
List<Area> Area1 = new List<Area>();
Area Area2 = new Area();
int countA;
private void Button_Click(object sender, EventArgs e)
{
Area2.areaID = countA;
Area1.Add(Area2);
countA++;
}
Buttonをクリックするごとに、areaIDの数値が0,1,2と変更されていくArea2を、ListジェネリックのArea1に追加させるコードを書いたつもりが、2,2,2と最後の数値が代入されてしまうようなのです。
Area1のareaIDに初期値の0から順番に代入するにはどうすればいいのか、よろしければアドバイスお願いします。
Re: C#のListジェネリック
Posted: 2013年7月09日(火) 23:04
by beatle
変数 Area2 は参照型の変数であり、何か「実体」を指し示しています。
その実体は「new Area()」で生成されたオブジェクトX(Xは仮の名前)です。
ですから
Area1.Add(Area2);
で追加されるものは常にオブジェクトXですので、
Area1 : X, X, X, ...
のようになっております。(Area2は常にXを指し示しています)
すなわち、Area2.areaIDが0のときにArea1を覗けば 0, 0, 0, ... となりますし、
Area2.areaIDが100のときにArea1を覗けば 100, 100, 100, ... となります。
Area1に追加されているのは全て同じオブジェクトだからです。
こんな感じにすれば解決します。
コード:
private void Button_Click(object sender, EventArgs e)
{
Area2 = new Area();
Area2.areaID = countA;
Area1.Add(Area2);
countA++;
}
これで、Area1の中身は
Area1 : X, Y, Z, ...
となり、ご所望の結果が得られるでしょう。
Re: C#のListジェネリック
Posted: 2013年7月10日(水) 07:36
by エルエン
参照型ということを、完全に失念しておりました。
つーかそういったことを判断できるレベルではありませんでした。
おかげで助かりました。
ありがとうございます!