動的配列の警告 への返答

投稿で使用できる特殊コードの説明。(別タブで開きます。)
本名は入力しないようにしましょう。
投稿した後で削除するときに使うパスワードです。返答があった後は削除できません。
返答する人が目安にします。相手が小学生か社会人かで返答の仕方も変わります。
最初の投稿が質問の場合、質問者が解決時にチェックしてください。(以降も追加書き込み・返信は可能です。)
※「過去ログ」について書くときはその過去ログのURLも書いてください。

以下の返答は逆順(新しい順)に並んでいます。

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