プログラマーに、プログラムを書くときにタイプするのが好きか、少ないかを尋ねたら、通常の答えは「少ない!」です。バグが多いか少ないかを尋ねると、通常の答えは「少ない!」です。これらは相反する目標です。
As New 構文は、非常に長い間 VB.NET の一部でした。ただし、文字列が添付されています。新しいオブジェクトを作成する必要があるかどうかは、ランタイムに完全に任せます。それはバグジェネレーターになる傾向があります。変数が既に割り当てられていても、本当に新しいオブジェクトを作成したい場合があります。また、このスニペットでは、かなりあいまいです。たとえば、次のようになります。
For ix As Integer = 0 To 42
Dim q As New Queue(Of Integer)
'' etc...
Next
問題は、ループの最初のパスで作成されたキューのインスタンスを1 つ取得するか、それとも 43 個取得するかです。プログラマーは実際に何を意図していたのでしょうか。構文からはあまり明確ではありません。
あなたが見落とした 3 番目の選択肢と、私が好む選択肢があります。「型推論」と呼ばれる VB9 (別名 VS2008) 以降で利用できます。変数の型を指定せず、コンパイラーに任せて解決する場合。このオプションはOption Infer Onでオンにする必要があり、デフォルトでオンになっています。As New の省略構文の利点を組み合わせ、さらに New ステートメントを使用してコード内でオブジェクトを明示的に作成できます。
Option Infer On
...
For ix As Integer = 0 To 42
Dim q = New Queue(Of Integer)
'' etc...
Next
ここで、q はコンパイラによって Queue 型であると推測され、コードがキューの 43 個のインスタンスを生成することは明らかです。C# 言語でこれに相当するのはvarキーワードです。