回答:
バージョンによって異なります。If
VB.NET 2008 の演算子は、3項演算子(およびnull合体演算子)です。これは導入されたばかりで、2008年より前は使用できませんでした。ここではいくつかの詳細情報です: Visual Basicの場合は発表
例:
Dim foo as String = If(bar = buz, cat, dog)
[編集]
2008年以前はでしたIIf
。これは、If
上記のオペレーターとほぼ同じように機能しました。
例:
Dim foo as String = IIf(bar = buz, cat, dog)
Iif
常に型のオブジェクトを返すObject
のに対し、If(bool, obj, obj)
オプション厳しい上で型チェックが可能になります。(Dim var As Integer = Iif(true, 1, 2)
オプションstrict onでコンパイルすることはできませんDim var As Integer = Iif(true, new Object(), new Object())
。簡単に書き込むことができるためです。Dim var As Integer = If(true, 1, 2)
ただし、返された型をチェックするため、オプションstrictで書き込むことはできます。)
VB6であっても、iifは常にVBで使用できます。
Dim foo as String = iif(bar = buz, cat, dog)
そのため、これは真の演算子ではなく、Microsoft.VisualBasic名前空間の関数です。
If()は最も近い同等物ですが、 "Option Strict off"を設定した場合、暗黙的な変換が行われることに注意してください。
たとえば、慎重でない場合、次のようなことを試してみたくなるかもしれません。
Dim foo As Integer? = If( someTrueExpression, Nothing, 2)
「foo」の値は0になります。
私は思います '?' C#で同等の演算子は代わりにコンパイルに失敗します
Dim foo As Integer? = If( someTrueExpression, New Integer?, 2)
です。
Option Strict On
。その理由はNothing
、VB.NET default(T)
ではでなくC#に相当するためnull
です。
Integer?
、それは、それがNULL可能だ意味-を参照してstackoverflow.com/questions/3628757/make-an-integer-null