- - PR -
Arraylist と 構造体について
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-04-14 13:11
はじめて投稿します。
.NET VBで開発しています。 構造体宣言の中にArraylistを宣言して、代入するとエラーになってしまいます。 Public AList As New ArrayList Public Structure tSt dim a as String dim b as ArrayList End Structure Public tpSt As tSt sub Test() tpSt.a = "ABC" AList.Add(tpSt) ある処理 AList(0).b.Add("123") ←ここでエラー・・・ end sub 私なりに調べたのですが、わからなかったので、よろしくお願いします。 | ||||||||
|
投稿日時: 2005-04-14 13:21
Structureの中にある、ArrayListのインスタンスが存在しないから。
#例外の内容をちゃんと見ました? _________________ 「伝える」とは「人に云う」と書く。 http://d.hatena.ne.jp/NAL-6295/ | ||||||||
|
投稿日時: 2005-04-14 13:23
dim b as ArrayList をNewしてないからなのでは?
というか、最低エラーの内容ぐらい書きましょう。 | ||||||||
|
投稿日時: 2005-04-14 13:31
>エラーになってしまいます
どうした時にどうなるか具体的に書くと返答が早く多くもらえると思いますよ。 みー助さんの書いたソースが全てだとすると、NAL-6295さんのおっしゃるようにNullReferenceExceptionでしょうね。 "AList(0).b"がNothingということです。 | ||||||||
|
投稿日時: 2005-04-14 13:35
すいません。エラー内容がなかったです。
----------------------------------------------------------------------- 'System.NullReferenceException' のハンドルされていない例外が microsoft.visualbasic.dll で発生しました。 追加情報 : オブジェクト変数または With ブロック変数が設定されていません。 ----------------------------------------------------------------------- dim b as New ArrayList とすると構造体メンバをNewとして宣言できません。 になってしまいます。 どのようにインスタンスを作るのでしょうか? .NET初めて4日目で苦労しています。。。 | ||||||||
|
投稿日時: 2005-04-14 13:51
そんなの、コンストラクタで生成すれば良いよ。←ある意味間違い
#追記 あうち、間違えてた・・・ 宣言した後に、ArrayListを生成してあげればよいと思いますよ。 ただ、多分、このメンバ構成の場合はClassにした方が適切だと思います。 Structureの場合インスタンスコンストラクタは引数無しだと定義できません。 #追記 というか、StructureとClassの違いは把握していますか?
そりゃ、勉強しないで作ってれば苦労するよ。 リファレンスとか読みましょうよ。 _________________ 一つ理解するたびに、一つあなたは楽になる。 [ メッセージ編集済み 編集者: NAL-6295 編集日時 2005-04-14 13:52 ] [ メッセージ編集済み 編集者: NAL-6295 編集日時 2005-04-14 14:15 ] | ||||||||
|
投稿日時: 2005-04-14 13:54
宣言に関して
1.Dim b As ArrayList 2.Dim b As Object 3.Dim b As new ArrayList うろ覚えで書いてますが、 もしかしたら3番のケースが駄目なのかもしてません。 Set b = new ArrayList 宣言の次の行に上のセット文書いたら収まりませんでしょうか? エラーの可能性ですが、 VB6での話ですので関係ないかもしれませんが、 構造体の中に構造体を埋め込むと 動的になる要素が多すぎて メモリの量が用意できなくなるから勘弁してくれ・・・・ というエラーに直面したことがあります。 その手の類なのかもしれません。 この場合 ArrayListを収める変数にn件までしか使わないよって言う明示的な宣言を 用意するとうまくいくかもしれません。 あくまで可能性の話です。 関係なかったらごめんなさい。 | ||||||||
|
投稿日時: 2005-04-14 14:12
いや、構造体は初期化子は書けないはずです。 引数のないコンストラクタもプログラマが書くことはできません。 つまり、全てのフィールドが初期値の状態の構造体をnewすることが必ず出来るような仕組みになっています。(構造体なのでnewとは書きませんが)
4日目だから苦労しているんですよね。本を読んだりプログラムを作ったりしていれば慣れてきますよ。 ちなみに.NETを勉強するのならVB.NETよりC#の方が何かと好ましいと思います。 会社の研修で、VB.NETと決められているなら仕方がないですけど。 VB.NETでも、少なくともOption StrictはOnにしておきましょう。 VB2005になったら、Myとかいう機能が付くみたいで、 後「先輩、この子画面をShow()できません。」 先「インスタンスを作ってないからだろ。」 後「インスタンス?ああ、聞いたことありますね。何ですか、それ?」 とか言われる悪寒 |
1|2|3
次のページへ»