下記は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)をどのように修正すればよいか、というものです。
どうぞよろしくお願い致します。
No.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
なるほど。。
これがキャストする、ということなのですね。具体例のおかげで、ようやく理解ができました。
Generic.Listは不勉強でまだ手付かずでしたが、こういう機能があるのですね。。
大変参考になりました。早速勉強してみます!
リンク先の資料も拝見しました。
少々理解が及ばない点もありますが、折を見てじっくり勉強させていただきます。
ご回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAにてメール作成した際、一部指定箇所のみ赤文字にしたいです。 下記の内容ですと作成されたメール本 1 2022/04/27 13:31
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:12
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 6 2022/06/08 12:55
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「オブジェクトが必要です。」...
-
Boolean型配列中のTrueの有無を...
-
HTTPSのとき":"が"%3A"ではなく...
-
Excel VBA の ChangeFileAccess
-
【正規表現】【javascript】CR...
-
ASP+アクセスでのSQLコメントに...
-
アンカーリンクをクリックさせ...
-
MFCのキャプション変更
-
IEで文字の色が取得したい
-
class指定したHTML要素の背景色...
-
[javascript][DOM]getElementBy...
-
javascript new演算子について...
-
static constメンバ変数(配列)...
-
VC++2005EEにて不可解な挙動
-
Ruby 最初のセパレータで文字列...
-
C言語でクロージャを記述する
-
エクセルでブラウザへのフォー...
-
関数を呼び出すHTMLタグ<body o...
-
ボタンをクリックすると数が増...
-
Imageコントロール vba
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Boolean型配列中のTrueの有無を...
-
Linux バイナリ実行できない "...
-
ASP+アクセスでのSQLコメントに...
-
ボタンをクリックすると数が増...
-
【正規表現】【javascript】CR...
-
【Jquery】changeイベント毎にa...
-
「オブジェクトが必要です。」...
-
Excel VBA の ChangeFileAccess
-
Vb.netのグローバル変数の宣言...
-
MFCのキャプション変更
-
onclick指定関数の引数へローカ...
-
同じ型【ハイフンと数字】だけ...
-
static constメンバ変数(配列)...
-
javascriptで文字挿入でtoggle...
-
サブウインドウから親ウインド...
-
URLの一部をコピーできるブック...
-
window.onloadでのfunction
-
Javascriptグローバル変数の値...
-
複数ファイルで使うグローバル...
-
全部のアクセスを指定したペー...
おすすめ情報