DOBON.NETプログラミング道掲示板
(現在 過去ログ1 を表示中)

[ 最新記事及び返信フォームをトピックトップへ ]

■33000 / inTopicNo.1)  List<xxx>でのAdd追加値がすべて一緒になってしまう
  
□投稿者/ み 一般人(1回)-(2015/06/27(Sat) 23:35:37)
  • アイコン環境/言語:[win7 .NET4.5] 
    分類:[.NET] 

    お世話になっております。
    C#でList<xxx>でADDにより項目を追加しているのですが
    最後に追加した値になっています。
    countはAddした分あります。

    List<MenuEntry> WME = new List<MenuEntry>();
    MenuEntry me = new MenuEntry();

    me.Id = "1";
    me.MTitl = "タイトル";
    WME.Add(me);

    これを数回繰り返してFor文にて内容を確認するとすべての内容が
    最後にセットした値になってしまっている

    よろしく御願いします。

引用返信 削除キー/
■33001 / inTopicNo.2)  Re[1]: List<xxx>でのAdd追加値がすべて一緒になってしまう
□投稿者/ Azulean 大御所(452回)-(2015/06/28(Sun) 00:11:27)
  • アイコン
    2015/06/28(Sun) 00:14:57 編集(投稿者)
    
    ■No33000に返信(みさんの記事)
    > C#でList<xxx>でADDにより項目を追加しているのですが
    > 最後に追加した値になっています。
    
    MenuEntry はクラスですか?
    そして、for 文の中で new していないということはありますか?
    
    // 想定例
    MenuEntry me = new MenuEntry();
    for (int i = 0; i < 5; i++)
    {
      // ループの外で作ったオブジェクトを使い回してしまう
      // このため、i = 0 〜 i = 4 まで同じオブジェクトに書き込む
      // 同じオブジェクトを5回追加したことと同じ効果
      me.Id = i.ToString();
      me.MTitl = "タイトル" + i.ToString();
      WME.Add(me);
    }
    // ここまで
    
    
    この 2 点が当てはまるのであれば、「参照型」という概念について学んでみてください。
    http://dobon.net/vb/dotnet/beginner/valuereference.html
    
    
    上記の例で言うと、こういう形にしなければならない。
    // 改善例
    for (int i = 0; i < 5; i++)
    {
      // forの中で新しいオブジェクトを作る
      // ループごとに別々のオブジェクトを操作しているので影響しない
      MenuEntry me = new MenuEntry();
    
      me.Id = i.ToString();
      me.MTitl = "タイトル" + i.ToString();
      WME.Add(me);
    }
    // ここまで
    
    
    
    
    もし、指摘内容が違うと言うことであれば、実際の for ブロックや、
    MenuEntry クラスの実装を知らないと回答が難しいと思われます。

引用返信 削除キー/
■33002 / inTopicNo.3)  Re[2]: List<xxx>でのAdd追加値がすべて一緒になってしまう
□投稿者/ み 一般人(2回)-(2015/06/28(Sun) 01:10:55)
  • アイコン返信ありがとうございます。
    仰る通りでございます。
    NEWを一度作成してそれに対してADDしていました。
    参照型の件、参照します。
    ありがとうございました。

解決み!
引用返信 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

Mode/  Pass/


- Child Tree -