動的配列の警告
投稿者 魔界の仮面弁士  ()
投稿日時
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
などとしておけば、警告は消えます。
(つまり、使う前に何でも良いから値を入れておくということ)
もしくは、コンパイルオプションの「割り当て前の変数の使用」を
[警告]から[なし]に切り替えて運用するという方法もあります。
投稿者 魔界の仮面弁士  ()
投稿日時
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)
ですね。
投稿者 nagasaqa  ()
投稿日時
2008/2/29 09:12:00
>>2
ありがとうございました。そうやってきちっとしたプログラムを書かないといけないのですね。
大変参考になりました。
ありがとうございました。そうやってきちっとしたプログラムを書かないといけないのですね。
大変参考になりました。
どのように回避したらよいでしょうか。教えてください。
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