実際のプログラミングでは、配列はよく使われるオブジェクトです。 Array、List などと同様、これらはすべて配列のカプセル化です。
次の 2 つの定義方法を見てみましょう。その違いがわかりますか?
Dim tB1() をバイトとして
Dim tB2() As Byte = {}
これらはどちらもバイト配列を定義しており、配列には要素がありません。
しかし、次の 2 つの文で違いがわかります。
Debug.Print(tB1 は何もありません)
Debug.Print(tB2 は何もありません)
最初の文の結果は True で、2 番目の文の結果は False です。 tB1 は配列ですが初期化されていないことに注意してください。これは Nothing と同等ですが、要素はありませんが、初期化されており、tB2 の他のプロパティにアクセスできます。長さ、結果は 0 で、空の配列であることを示します。長さなどの tB1 の他の属性にアクセスすると、エラーが発生します。
空の配列と初期化されていない配列の間には、多くの場所でまだ違いがあります。
例えば:
Debug.Print(System.Text.Encoding.Default.GetString(tB1))
Debug.Print(System.Text.Encoding.Default.GetString(tB2))
tB1 と tB2 には要素がありませんが、tB1 が初期化されていないため、システムは例外をスローします。 tB2 には要素がありませんが、要素が 0 の配列を表します。システムは例外をスローせず、空の文字列を返します。
このことから、Nothing と 0 要素の配列の間にはまだ違いがあることがわかります。これは、私たちが見落としがちなことです。