dポイントプレゼントキャンペーン実施中!

下記はArrayListに構造体の値を格納し、表示させるプログラムです。

--------------------------------
Option Strict Off

'構造体
Public Structure hoge
  Dim a As String
  Dim b As String
  Dim c As String
End Structure

Private Sub test()
  Dim aryhoge As New ArrayList
  Dim foo As hoge

  foo.a = "aa"
  foo.b = "bb"
  foo.c = "cc"

  aryhoge.Add(foo)        
  MessageBox.Show(aryhoge(0).a)  'A) Option Strict Off だと"aa"と表示される
End Sub
--------------------------------

このプログラムはOption Strict Offだとメッセージボックスに"aa"と表示されます。
ですがOption Strict Onだと、(A)の箇所にて「遅延バインディングを使用できません」というエラーが発生し、実行ができません。

質問内容は、Option Strict Onで上記のプログラムを動かすには、(A)をどのように修正すればよいか、というものです。

どうぞよろしくお願い致します。

A 回答 (2件)

Namespace Q3396774


Public Structure hoge
  Dim a As String
  Dim b As String
  Dim c As String
End Structure


Class Q3396774A

'構造体

Shared Sub Main

test()


End Sub
Shared sub test()
  Dim aryhoge As New System.Collections.ArrayList
  Dim foo As hoge

  foo.a = "aa"
  foo.b = "bb"
  foo.c = "cc"

  aryhoge.Add(foo) 
  'A) Option Strict Off だと"aa"と表示される
  'ArrayListに追加された要素は「System.Object」なのでメンバにaはない。
  '明示的に「hoge構造体」に変換してあげる
  System.Windows.Forms.MessageBox.Show(DirectCast(aryhoge(0),hoge).a)  

'ただし個人的にはSystem.Collections.Generic.List(Of hoge)を勧めたい
  
  Dim aryhoge2 As New System.Collections.Generic.List(Of hoge)
  Dim foo2 As hoge

  foo2.a = "aa"
  foo2.b = "bb"
  foo2.c = "cc"

  aryhoge2.Add(foo2) 
  'キャストする必要がない
  System.Windows.Forms.MessageBox.Show(aryhoge2(0).a)
  
  '本質問とは関係ないしどうでもいいことだけれど,コレクション系のクラスを扱うときには
  'http://oshiete1.goo.ne.jp/qa3320160.html
'のような問題が発生することも知っておくといいですね。

End Sub


End Class

End Namespace
    • good
    • 0
この回答へのお礼

なるほど。。
これがキャストする、ということなのですね。具体例のおかげで、ようやく理解ができました。

Generic.Listは不勉強でまだ手付かずでしたが、こういう機能があるのですね。。
大変参考になりました。早速勉強してみます!

リンク先の資料も拝見しました。
少々理解が及ばない点もありますが、折を見てじっくり勉強させていただきます。
ご回答ありがとうございました。

お礼日時:2007/10/03 05:30

MessageBox.Show(CType(aryhoge(0), hoge).a)

    • good
    • 0
この回答へのお礼

できました!
こういうのをキャストというのですね。。
CType関数やDirectCastの使い方がようやく見えてきました。
ご回答ありがとうございました。

お礼日時:2007/10/03 05:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!