動的配列の警告 への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 魔界の仮面弁士  ()
投稿日時
2008/2/27 00:15:00
>>1
> Dim backdata() As String = LoadFile(backdata)
失礼しました。正しくは
Dim backdata() As String = LoadFile(filenam)
ですね。
> Dim backdata() As String = LoadFile(backdata)
失礼しました。正しくは
Dim backdata() As String = LoadFile(filenam)
ですね。
投稿者 魔界の仮面弁士  ()
投稿日時
2008/2/27 00:07:00
> 値が渡される前に参照によって呼び出されています
こういう時には、メソッドの実装を
Sub subLoadfile(ByVal fname As String, ByRef dataline As String())
にするのではなく、
Function LoadFile(ByVal fname As String) As String()
にした方が良いでしょう。
そして、
Dim backdata() As String = LoadFile(backdata)
のようにすれば、エラーも出ないはずです。
どうしても ByRef で処理したいのであれば、
Dim backdata(-1) As String
もしくは、
Dim backdata() As String = {}
のように、「長さゼロの配列」を入れておくか、または
Dim backdata() As String = Nothing
などとしておけば、警告は消えます。
(つまり、使う前に何でも良いから値を入れておくということ)
もしくは、コンパイルオプションの「割り当て前の変数の使用」を
[警告]から[なし]に切り替えて運用するという方法もあります。
こういう時には、メソッドの実装を
Sub subLoadfile(ByVal fname As String, ByRef dataline As String())
にするのではなく、
Function LoadFile(ByVal fname As String) As String()
にした方が良いでしょう。
そして、
Dim backdata() As String = LoadFile(backdata)
のようにすれば、エラーも出ないはずです。
どうしても ByRef で処理したいのであれば、
Dim backdata(-1) As String
もしくは、
Dim backdata() As String = {}
のように、「長さゼロの配列」を入れておくか、または
Dim backdata() As String = Nothing
などとしておけば、警告は消えます。
(つまり、使う前に何でも良いから値を入れておくということ)
もしくは、コンパイルオプションの「割り当て前の変数の使用」を
[警告]から[なし]に切り替えて運用するという方法もあります。
投稿者 nagasaqa  ()
投稿日時
2008/2/26 23:34:00
VB2003 では、配列数を確保しないで、SUBを呼び出して、データ分だけの配列を勝手に確保してくれましたが、2005では、警告が出ます。(値が渡される前に参照によって呼び出されています~)
どのように回避したらよいでしょうか。教えてください。
Private Sub Butload_Click( 略 ) Handles Butload.Click
Dim backdata() As String'動的配列定義
subLoadfile(filenam, backdata)’subに渡す
If IsNothing(backdata) Then
Exit Sub
End If
End Sub
Private Sub subLoadfile(ByVal fname As String, ByRef dataline As String())
Dim fstream As New IO.StreamReader(fname, System.Text.Encoding.Default)
dataline = fstream.ReadLine.Split(","c)’ここで配列数が決まる。
fstream.Close()
End Sub
どのように回避したらよいでしょうか。教えてください。
Private Sub Butload_Click( 略 ) Handles Butload.Click
Dim backdata() As String'動的配列定義
subLoadfile(filenam, backdata)’subに渡す
If IsNothing(backdata) Then
Exit Sub
End If
End Sub
Private Sub subLoadfile(ByVal fname As String, ByRef dataline As String())
Dim fstream As New IO.StreamReader(fname, System.Text.Encoding.Default)
dataline = fstream.ReadLine.Split(","c)’ここで配列数が決まる。
fstream.Close()
End Sub
ありがとうございました。そうやってきちっとしたプログラムを書かないといけないのですね。
大変参考になりました。