
VB.net 2010 の質問です。
配列変数を他のプロシージャに引数で渡す際の、配列変数の要素数をあらかじめ宣言していないとエラーになります。
Dim Hairetsu() As String ' ←エラー
Dim Hairetsu(100) As String ' ←正常
Public Sub aaa(ByRef Hairetsu() As String)
Hairetsu(0) = "Test" '←正常の場合と、エラーの場合
End Sub
Hairetsu(100) のように、要素数を宣言していると、エラーにならないのですが、
プログラム中、要素数がどこまで増加するか、分かりません。
Hairetsu()のように、要素数未確定の配列変数を渡すことは出来ないのでしょうか。
ご存知の方がいらっしゃいましたら、なにとぞアドバイスの程、よろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
まずは、VB.NETでの配列の正体を知っておいた方がよいでしょう。
http://msdn.microsoft.com/ja-jp/library/dd314345 …
特に
> 3-3-3 参照型としての配列変数
から下をよく読んで理解してください。
> Dim Hairetsu() As String
は、Stringの配列を覚えることができる変数Hairetsuを用意するだけで、配列の実体は用意されません。
上記URLの「図 3-11 Nothing が代入されるのは、あくまで配列変数 D 自体」が近い状態です。
この図の「配列の実体」が最初から存在しない、というものです。
> Public Sub aaa(ByRef a() As String)
> a(0) = "Test" '←正常の場合と、エラーの場合
※ 念の為、仮引数の名前を変えました。
このsubを aaa(Hairetsu) と呼び出した場合、 Hairetsu() しただけの場合は、a = Nothing となっています。
よって、 a(0) は Nothing(0) ということになり、そんなものは無いのでエラーになります。
※ エラーメッセージはちゃんと読みましょう。
※ 質問するなら、ただ「エラーになります」では対処しようがありません。
※ 正確なエラーメッセージを記載るようにしましょう。
※ 例えば、そのエラーは
※ 「 NullReferenceException "オブジェクトのインスタンスを指定する必要がある部分に null 値が指定されています" 」
※ とか表示されていませんでしたか?
対策ですが、いくつもあるので、目的によって選択することになります。
○ aaa内で Nothingだったら処理を中止するようなコードにする
例) if a is Nothing then exit sub
○呼び出し元で、Hairetuをredimしてからaaaを呼び出す。
○aaa内でredim する。仮引数aはByRefになっているので、呼び出し元の変数が変更される。
※ なお、参照型の特性として「a(0) = "Test" 」だけなら、ByVal a でも同じ「配列の実体」にアクセスすることになります。
○ sub aaaではなく、 function aaa() as String() 等といった配列も返す関数にする
○ List(of T) 等の可変長で配列っぽく使えるクラスを使う
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
-
Functionの戻り値を配列にしたいのですが
Visual Basic(VBA)
-
FORMが開いているかどうかの確認方法
Visual Basic(VBA)
-
-
4
VBで構造体の配列を関数に渡す方法?
Visual Basic(VBA)
-
5
VB.NET2005 TextBox 高さ(Height) 変更
Visual Basic(VBA)
-
6
VBのReturnの使い方
Visual Basic(VBA)
-
7
VB.Net Object型 空かどうか
Visual Basic(VBA)
-
8
VBのFunctionで、配列を引数や返却値にできますか?
Visual Basic(VBA)
-
9
Functionで戻り値を複数返す方法
Visual Basic(VBA)
-
10
CloseとDisposeの違い
Visual Basic(VBA)
-
11
Designer.vbは直接コードをいじってはだめ?
Visual Basic(VBA)
-
12
VB.NET getとsetの概念がわかりません。
Visual Basic(VBA)
-
13
フォームの再読み込み
Visual Basic(VBA)
-
14
VB.NETで小数点以下の桁数を取得したい
その他(ソフトウェア)
-
15
値を返さないコード パス
Visual Basic(VBA)
-
16
【VB.NET】App.configにファイルパスを設定して読み込みたい
Microsoft ASP
-
17
配列の重複する値とその個数を取得したい
Visual Basic(VBA)
-
18
VBでC言語のポインタみたいな使い方?
Visual Basic(VBA)
-
19
Visual Basic.NETの、Form 間での引数の引渡し方法を教えてください。
Visual Basic(VBA)
-
20
.NET - 配列変数を省略可能の引数にする方法
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
変数を動的に作るには?
-
パソコンキーボードで時分秒を...
-
VBで作った乱数を一度も重複さ...
-
IF関数でEmpty値を設定する方法。
-
重複なしでランダムに画像を表...
-
排列と配列の漢字の使い分けは
-
System.err. printlnとSystem.o...
-
InputStream.read()でタイムア...
-
VBSエラー"オブジェクト型の変...
-
javaのコンパイルエラーについ...
-
JSPやサーブレットでSystem.out...
-
JavaScriptの変数をjavaのメソ...
-
「配列定数は、イニシャライザ...
-
javaです
-
jspでの二次元配列
-
JButton-背景の透明化
-
C#で、あるクラスのメンバーす...
-
int型のゼロ埋め
-
createImage()を使い コンパイル
-
プログラミングの問題です。大...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
IF関数でEmpty値を設定する方法。
-
パソコンキーボードで時分秒を...
-
動的配列が存在(要素が有る)か...
-
VBAで配列の計算
-
VB.net 引数で配列変数を渡す際...
-
C言語 重複しない4ケタの乱数...
-
EXCEL VBA で、0から?1から?
-
変数を動的に作るには?
-
複数のテキストボックスに同じ...
-
配列の要素数を超えた参照のコ...
-
VBでbyte配列型のインスタンス...
-
10進数を4桁のバイト配列に格納...
-
ジャグ配列とは
-
ログデータを表示するグラフに...
-
ゲーム箱入り娘のつくりかた
-
遅延バインディングを使用でき...
-
VBで作った乱数を一度も重複さ...
-
C#の質問
-
このプログラムがわかりません
-
【MFC】GetCount()とGetSize()...
おすすめ情報