C#のListジェネリック

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
エルエン

C#のListジェネリック

#1

投稿記事 by エルエン » 12年前

コード:

[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から順番に代入するにはどうすればいいのか、よろしければアドバイスお願いします。

beatle
記事: 1281
登録日時: 14年前
住所: 埼玉
連絡を取る:

Re: C#のListジェネリック

#2

投稿記事 by beatle » 12年前

変数 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ジェネリック

#3

投稿記事 by エルエン » 12年前

参照型ということを、完全に失念しておりました。
つーかそういったことを判断できるレベルではありませんでした。
おかげで助かりました。
ありがとうございます!

閉鎖

“C言語何でも質問掲示板” へ戻る