こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

[C#]Arraylistに追加した構造体の内容の変更

struct Hoge
{
    public string name;
    public string address;
}


ArrayList list = new ArrayList();
Hoge test = new Hoge();

test.name = "あいうえお";
test.address = "123";
list.Add(test);

test.name = "かきくけこ";
test.address = "456";
list.Add(test);
//ここから
//list[0].name = "さしすせそ"; のように追加するコードを書きたいです
//ここに
for (int i = 0; i < List.Count; i++)
{
    MessageBox.Show((Hoge)List[i]).name.ToString());
}


これで、
list[0]のnameには"あいうえお"
list[1]のnameには"かきくけこ"
が、代入されていますが
list[0]のnameをArrayListに追加したあとに変更したいのです。

このままだと、「あいうえお」「かきくけこ」と表示されますが、
「さしすせそ」を途中でlist[0]の代入して、
「さしすせそ」「かきくけこ」と表示したいのです。

投稿日時 - 2007-11-05 20:51:13

QNo.3492235

困ってます

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.5

直接書き換えてしまったらどうでしょう?

Hoge sa;
sa = (Hoge)list[0];   // list[0]の内容をコピー
sa.name = "さしすせそ";  // 必要な部分を書き換える
list[0] = sa;       // list[0]に代入

こんな書き方だめだったらごめんなさい。

投稿日時 - 2007-11-16 15:37:34

ANo.4

class Hoge
{
    public string name = null;
    public string address = null;
}

C/C++で言うところの構造体とC#のstructは全くの別物。
structではなくclassを使いましょ。


http://www12.plala.or.jp/dokugaku/lecture/6/4.html
http://www.atmarkit.co.jp/fdotnet/csharp_abc2/csabc2_005/cs2_005_03.html

投稿日時 - 2007-11-06 20:03:40

ANo.3

ArrayListに Replaceが無いので InsertとRemoveまたはRemoveAtを使って更新する方法かと思います

Hoge obj;
obj = (Hoge)List[0];
obj.Name = "さしすせそ";
list.RemoveAt(0);
list.Insert(0, obj);

# 的外れならご容赦ください

投稿日時 - 2007-11-06 09:17:46

ANo.2

ArrayListではなくListジェネリックでもいいのなら
できると思いますが参考までに。

struct Hoge {
public string name;
public string address;
}
class Class2 {
public void main(){
List<Hoge> hoge = new List<Hoge>();

Hoge _hoge;

_hoge.name = "あいうえお";
_hoge.address = "123";
hoge.Add( _hoge );

_hoge.name = "かきくけこ";
_hoge.address = "456";
hoge.Add( _hoge );

_hoge.name = "さしすせそ";
_hoge.address = "789";
hoge.Insert( 0, _hoge );

for( int i=0; i< hoge.Count; i++ ){
MessageBox.Show( hoge[i].name.ToString() );
}

}
}

投稿日時 - 2007-11-06 02:31:00

結論から言うと出来ないと思う。

あまり理解できているわけじゃないけど,俺も同じトラブルに遭ったことがあった。

http://oshiete1.goo.ne.jp/qa3320160.html

投稿日時 - 2007-11-05 20:59:27

補足

本当ですか・・・
先に数十個 .name だけで list に追加して
for (int i = 0; i < List.Count; i++)
{
    //.name から .address を取得する処理
}

と、このようにArrayListの.nameを読み込み、それに基づいて
.addressを後から追加したいのですが
他の方法でできるのであれば、どなたかご教授願います。

投稿日時 - 2007-11-05 21:07:09