0

こんにちは、このコードを実行しようとすると、「nullreferenceexception was unhandled」というエラーが表示されます。

        For i As Integer = 1 To aantaltags
            csvopc(i) = csvtagssplit(17 * i)
            csvsql(i) = csvtagssplit(17 * i + 15)
        Next

背景: クリーンアップして csvtagssplit() に分割した csv ファイルを読みました

csvopc と csvsql は両方とも、プログラムの先頭で string() として宣言されています。

私がした愚かなことは何ですか?

必要に応じて複製します: コード: http://pastebin.com/JDPa6FSB csv: http://pastebin.com/2e66i9EB

4

2 に答える 2

0

cvsopcあなたの問題は、2 つの変数とcvssql,を宣言するコードの最初の部分にあります 。

あなたのコメントからあなたが書くように

Dim csvopc As String() 
Dim csvsql As String()

しかし、これは次元なしで 2 つの変数を宣言するだけです。
したがって、 csvopc(i) に到達しようとすると、存在しないインデックスを効果的に参照しています

要素の正確なサイズがわからないのに、なぜ配列を使用するのでしょうか? List(Of String)要素を動的に追加できる場所に簡単に切り替えることができます

Dim csvopc As List(Of String) = new List(Of String)
Dim csvsql As List(Of String) = new List(Of String)

そしてあなたのループで

    For i As Integer = 0 To aantaltags - 1
        csvopc.Add(csvtagssplit(17 * i))
        csvsql.Add(csvtagssplit(17 * i + 15))
    Next

List(Of String) は、次のように Index によって参照することもできます。

   Dim aValue = csvopc(0)
于 2013-05-15T14:24:44.390 に答える
0

コードの実行時にデータを検査するには、デバッガーを使用してコードをステップ実行する必要があります。すべてを初期化する必要がある場所にブレークポイントを配置できますが、例外が発生する前に、値が何であるかを確認できます。

ループのどの反復が失敗したか、具体的にどの行が失敗したか? その行にブレークポイントを置き、行が実行される直前にすべての値が何であるかを確認します。このデバッグでエラーが明らかにならない場合は、デバッグ中に見つけたデータで投稿を更新してください。

于 2013-05-15T14:11:45.173 に答える