VB.NETでもdefault(T)したい

default(T)

C#のコードをVBに移植している時に以下のコードがありました。あ、なんで移植してるんだってツッコミは無しね。

class Hoge<T>
{
    public T HogeHoge(T value = default(T))
    {
        return value;
    }
}

はて、VBではdefault(T)に対応する演算子って何でしたっけ? と言うことでググっても出てきません。

当たり前です。VBでは演算子ではないからです。 と言うわけで、各値型及び参照型の既定値を表すのはNothingです。

Nothing (Visual Basic)

null と Nothing

Nothingを用いた既定値での初期化は幾つか試した感じdefault(T)と同じようです。 しかし、残念ながらmsdnではNothingではどのように初期化されるかについて明確に書いてあるところを見つけられませんでした。

でもまぁ、多分default(T)と同じでしょ。多分。きっと。おそらく。根拠は見つけられなかったけど。

ということでdefaultの説明をどうぞ。

ジェネリック コードの default キーワード (C# プログラミング ガイド)

と言うわけで、先ほどのコードと等価なコードがこちら。

Class Hoge(Of T)
    Public Function HogeHoge(Optional value As T = Nothing) As T
        Return value
    End Function
End Class

おわりに

プロのVBユーザからすれば今更何を言っているんだといった感じですが、弊社としては初めて知ったのでメモがてら書きました。

C#のように専用のキーワードを導入せずにNothingで初期化できるようになった要因は、まぁ、レガシーVBとの互換性でしょうか。

客観的にどちらかがいいのかは弊社には分かりませんが、個人的には『何も参照していない』を表す値と『既定値』を表す値を表現するキーワードが同じってのはかなり違和感を感じます。

おわり