- - PR -
構造体をArrayListにAddした場合の値の変更について
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-01-06 23:25
お世話さまです。
下記のような構造体をArrayListに格納した後、 n番目の値を変更したいのですが、簡単に行う方法はないでしょうか? Public Structure stTbl Public Code As String Public Name As ArrayList End Structure Dim typTbl As stTbl Dim ArlTbl As New ArrayList() typTbl.Code = "1" typTbl.Name = New ArrayList() typTbl.Name.Add("名前11") typTbl.Name.Add("名前12") typTbl.Name.Add("名前13") ArlTbl.Add(typTbl) typTbl.Code = "2" typTbl.Name = New ArrayList() typTbl.Name.Add("名前21") typTbl.Name.Add("名前32") typTbl.Name.Add("名前23") ArlTbl.Add(typTbl) ここで、ArlTbl(1).Name(1)の"名前32"を"名前22"に変更したいのです。 現状では、下記のように1番目のArrayListを削除して、 内容をセットし直して追加しています。 ArlTbl.RemoveAt(1) typTbl.Code = "2" typTbl.Name = New ArrayList() typTbl.Name.Add("名前21") typTbl.Name.Add("名前22") typTbl.Name.Add("名前23") ArlTbl.Add(typTbl) ダイレクトにNameフィールドだけを変更するような方法はないでしょうか? 以上、ご教示のほど宜しくお願い致します。 | ||||||||
|
投稿日時: 2006-01-07 00:14
キャストして書き換えるだけでしょうけど、 その前に Name は ArrayList である必要はないような... (^^;) 複雑なテーブル構造になってます。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-01-07 05:58
じゃんぬねっと様、早速のレスありがとうございます。
キャストして書き換えるには、具体的にはどのように 書けば良いのでしょうか? If DirectCast(DirectCast(ArlTbl(1), stTbl).Name(1), String) = "名前22" Then ・・・・ End If のように、参照は当然可能なんですが、 DirectCast(DirectCast(ArlTbl(1), stTbl).Name(1), String) = "名前22" という具合に設定しようとすると、『参照しかできません!』 みたいなエラーメッセージで弾かれてしまいます。 お手数をおかけしますが、ご教示のほど宜しくお願い致します。 | ||||||||
|
投稿日時: 2006-01-07 09:14
まず、Name に ArrayList を採用する意味がありません。 型が付与できる場合は、型を使うことを強く推奨します。(CLR の主役は型です) このように書き換えてみました。
ところで、Class ではなく Structure を選択された理由を教えてください。 参照型の ArrayList の中に格納された値型の Structure があって、 片割れとなる参照型の ArrayList がさらに中に含まれる、 という構造を見ているとちょっと混乱しますね。(^^;) _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-01-07 21:55
これかなぁ
http://www.atmarkit.co.jp/fdotnet/onepoint/onepoint02/onepoint02_01.html ________________________________ □ Posted by Jitta on 2006/01/07 | ||||||||
|
投稿日時: 2006-01-09 16:04
じゃんぬねっと様、レスありがとうございました。
そして、遅レスになってしまい申し訳ありませんでした。 >まず、Name に ArrayList を採用する意味がありません。 勉強不足のため、StringCollectionなるものの存在を知りませんでした。^^; >型が付与できる場合は、型を使うことを強く推奨します。 了解しました! 以後、肝に銘じます。 >ところで、Class ではなく Structure を選択された理由を教えてください。 変数の格納型として、クラス化するという発想に及びませんでした。 部品をなんとなくクラス化したことはあるのですが、 実は、未だにどのようなモノをクラス化して、 どのようなモノをPublicモジュール化すべきなのかの 住み分けも理解できてない初心者です。 ご教示頂いた手法で、入れ子のArrayListをStringCollection に書き換えてみようと思います。 ご教示ありがとうござました。 | ||||||||
|
投稿日時: 2006-01-09 16:07
Jitta様、レスありがとうございます。
ご指摘の件は、単なる買いかぶりでございます。^^; しかし、そういった意図も存在するんですね。 勉強になりました。 | ||||||||
|
投稿日時: 2006-01-09 22:32
リファレンスを見てからご検討頂いた方が良いと思います。 構造体とクラス 事前知識がなければ、分けられませんよね。 誰でもそうなんですが、判らないことは判断できません。(^^) _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |
1|2|3
次のページへ»