Perl'de (ve diğer dillerde) bir koşullu üçlü operatör şu şekilde ifade edilebilir:
my $foo = $bar == $buz ? $cat : $dog;
VB.NET'te benzer bir operatör var mı?
Perl'de (ve diğer dillerde) bir koşullu üçlü operatör şu şekilde ifade edilebilir:
my $foo = $bar == $buz ? $cat : $dog;
VB.NET'te benzer bir operatör var mı?
Yanıtlar:
Sürüme bağlıdır. If
VB.NET 2008'de operatörü bir Üçlü operatör (yanı sıra boş kaynaşma operatörü) 'dir. Bu yeni tanıtıldı, 2008'den önce mevcut değildi. İşte biraz daha bilgi: Visual Basic If duyuru
Misal:
Dim foo as String = If(bar = buz, cat, dog)
[DÜZENLE]
2008'den önce , yukarıda açıklanan operatöre IIf
neredeyse aynı şekilde çalıştı If
.
Misal:
Dim foo as String = IIf(bar = buz, cat, dog)
Iif
her zaman tür bir nesne döndürür Object
, oysa If(bool, obj, obj)
katı seçenekle tip kontrolüne izin verir. ( Dim var As Integer = Iif(true, 1, 2)
tıpkı kolayca yazabildiğiniz için katı seçenekle derlenmeyecektir Dim var As Integer = Iif(true, new Object(), new Object())
. Dim var As Integer = If(true, 1, 2)
Yine de sıkı bir seçenekle yazabilirsiniz , çünkü iade edilen türü kontrol edecektir.)
iif, VB6'da bile her zaman VB'de mevcuttur.
Dim foo as String = iif(bar = buz, cat, dog)
Gerçek bir işleç değil, Microsoft.VisualBasic ad alanındaki bir işlevdir.
() En yakın eşdeğer ise ancak "Option Strict off" seçeneğini belirlediyseniz örtük dönüşümlere dikkat edin
Örneğin, dikkatli değilseniz, aşağıdaki gibi bir şey denemek isteyebilirsiniz:
Dim foo As Integer? = If( someTrueExpression, Nothing, 2)
"Foo" 0 değerini verecek!
Bence '?' C # 'daki operatör eşdeğeri derleme başarısız
Dim foo As Integer? = If( someTrueExpression, New Integer?, 2)
.
Option Strict On
. Bunun nedeni, Nothing
VB.NET'te C # 'lara default(T)
değil , buna eşdeğer olmasıdır null
.
Integer?
nullable anlamına gelir - bkz. Stackoverflow.com/questions/3628757/make-an-integer-null
CType(Nothing, DateTime?
).