No Perl (e em outros idiomas), um operador ternário condicional pode ser expresso assim:
my $foo = $bar == $buz ? $cat : $dog;
Existe um operador semelhante no VB.NET?
No Perl (e em outros idiomas), um operador ternário condicional pode ser expresso assim:
my $foo = $bar == $buz ? $cat : $dog;
Existe um operador semelhante no VB.NET?
Respostas:
Depende da versão. O If
operador no VB.NET 2008 é um operador ternário (assim como um operador de coalescência nula). Isso foi introduzido recentemente, antes de 2008 isso não estava disponível. Aqui estão mais algumas informações: Visual Basic Se anúncio
Exemplo:
Dim foo as String = If(bar = buz, cat, dog)
[EDITAR]
Antes de 2008, foi IIf
, que trabalhou quase de forma idêntica ao If
operador descrito acima.
Exemplo:
Dim foo as String = IIf(bar = buz, cat, dog)
Iif
sempre retorna um objeto do tipo Object
, enquanto If(bool, obj, obj)
permite a verificação do tipo com a opção strict on. ( Dim var As Integer = Iif(true, 1, 2)
Não irá compilar com a opção rigorosa, porque você poderia facilmente escrever Dim var As Integer = Iif(true, new Object(), new Object())
, você pode escrever. Dim var As Integer = If(true, 1, 2)
Com opção rigoroso sobre embora, porque ele vai verificar o tipo retornado.)
O iif sempre esteve disponível no VB, mesmo no VB6.
Dim foo as String = iif(bar = buz, cat, dog)
Não é um operador verdadeiro, como tal, mas uma função no espaço para nome Microsoft.VisualBasic.
Se () é o equivalente mais próximo, mas tenha cuidado com conversões implícitas, se você tiver definido "Opção restrita"
Por exemplo, se você não tomar cuidado, pode ser tentado a tentar algo como:
Dim foo As Integer? = If( someTrueExpression, Nothing, 2)
Dará a "foo" o valor 0!
Eu acho que o '?' O operador equivalente em C # falharia na compilação
Dim foo As Integer? = If( someTrueExpression, New Integer?, 2)
.
Option Strict On
. O motivo é que Nothing
no VB.NET é equivalente a C #, default(T)
e não a null
.
Integer?
isso significa que é anulável - ver stackoverflow.com/questions/3628757/make-an-integer-null
CType(Nothing, DateTime?
).