Dalam Perl (dan bahasa lain), operator ternary kondisional dapat diekspresikan seperti ini:
my $foo = $bar == $buz ? $cat : $dog;
Apakah ada operator serupa di VB.NET?
Dalam Perl (dan bahasa lain), operator ternary kondisional dapat diekspresikan seperti ini:
my $foo = $bar == $buz ? $cat : $dog;
Apakah ada operator serupa di VB.NET?
Jawaban:
Tergantung pada versi. The If
operator dalam VB.NET 2008 merupakan operator ternary (serta operator perpaduan null). Ini baru saja diperkenalkan, sebelum 2008 ini tidak tersedia. Berikut beberapa info lebih lanjut: Visual Basic If pengumuman
Contoh:
Dim foo as String = If(bar = buz, cat, dog)
[EDIT]
Sebelum 2008 itu IIf
, yang bekerja hampir identik denganIf
operator yang dijelaskan di atas.
Contoh:
Dim foo as String = IIf(bar = buz, cat, dog)
Iif
selalu mengembalikan objek tipe Object
, sedangkan If(bool, obj, obj)
memungkinkan untuk memeriksa tipe dengan opsi ketat. ( Dim var As Integer = Iif(true, 1, 2)
tidak akan mengkompilasi dengan opsi ketat karena Anda bisa dengan mudah menulis Dim var As Integer = Iif(true, new Object(), new Object())
. Anda BISA menulis Dim var As Integer = If(true, 1, 2)
dengan opsi ketat pada, karena itu akan memeriksa jenis yang dikembalikan.)
iif selalu tersedia di VB, bahkan di VB6.
Dim foo as String = iif(bar = buz, cat, dog)
Ini bukan operator sejati, karena itu, tetapi sebuah fungsi dalam namespace Microsoft.Visual.
If () adalah padanan terdekat tapi waspadalah terhadap konversi implisit yang terjadi jika Anda telah menyetel "Option Strict off"
Misalnya, jika Anda tidak hati-hati, Anda mungkin tergoda untuk mencoba sesuatu seperti:
Dim foo As Integer? = If( someTrueExpression, Nothing, 2)
Akan memberi "foo" nilai 0!
Saya pikir '?' operator yang setara dalam C # malah akan gagal kompilasi
Dim foo As Integer? = If( someTrueExpression, New Integer?, 2)
.
Option Strict On
. Alasannya adalah bahwa Nothing
dalam VB.NET setara dengan C # default(T)
daripada null
.
Integer?
itu berarti nullable - lihat stackoverflow.com/questions/3628757/make-an-integer-null
CType(Nothing, DateTime?
).