2009-10-28 9 views
5

のすべての内容をクリアする私はこれを持っている:vb.net:文字列配列

Dim split As String() = temp_string.Split(",") 

    ''#feed all info into global variables 
    patient_id = split(0) 
    doc_name = split(1) 
    lot__no = split(2) 
    patient_name = split(3) 

どのように私はスプリットのすべての内容を消去しますか()?

答えて

4

いつでも参照をクリアするNothingに設定できます。その後、ガベージコレクタは、それが良いアイデアであると分かったら残りの部分を処理します。これは、あなたが一般的にこのことを心配する必要はありません方法のローカル変数の場合

split = Nothing 

しかし、配列はすぐにそれがスコープ外になると、ガベージコレクションのために利用できるようになります。

+0

あなたの方法は、以下の方法よりも優れています。あなたはちょうど分割=何もないと言っていますか? –

+0

私は 'Array.Clear'の後も、splitは(まだクリアされている)配列への参照を保持していると仮定します。私のサンプルでは何も参照しません。私は、ほとんどの通常のケースでは、その差異が目立たないと言います(splitは、メソッドが終了したときにスコープから外れるメソッドのローカル変数だと仮定します)。 –

+1

+1は "これを心配する必要はありません"配列自体がグローバル変数でない限り、それをNothingに設定する正当な理由はなく、それはそうではありません。 –

8
ReDim split(-1) 
+0

あなたの方法は以下の2つよりも優れています –

+1

3つの方法の違い: redim split(-1) これは、要素がゼロの文字列配列として配列を残します。 Array.Clear(split、0、split.Length) これは配列に要素の値が何も割り当てられていない状態にします。 split = nothing これにより、splitには何も割り当てられません。 どちらが良いですか?それは依存しますが、時にはそれは違いを生みます。たとえば、後でuboundを使用してsplitの上限を見つけると、これら3つのケースで0,3、またはエラーが発生します。 – xpda

5

何もする必要はありません。ガベージコレクタは、変数をクリアするジョブを実行します。明示的にすべての変数を何も設定しないと、アプリケーションが遅くなります。

+0

これはこれまでに提供された唯一の正解です。 –