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?
vb.net
operators
conditional-operator
short-circuiting
Jim Counts
fonte
fonte
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úncioExemplo:
[EDITAR]
Antes de 2008, foi
IIf
, que trabalhou quase de forma idêntica aoIf
operador descrito acima.Exemplo:
fonte
Iif
sempre retorna um objeto do tipoObject
, enquantoIf(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 escreverDim 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.
Não é um operador verdadeiro, como tal, mas uma função no espaço para nome Microsoft.VisualBasic.
fonte
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:
Dará a "foo" o valor 0!
Eu acho que o '?' O operador equivalente em C # falharia na compilação
fonte
Dim foo As Integer? = If( someTrueExpression, New Integer?, 2)
.Option Strict On
. O motivo é queNothing
no VB.NET é equivalente a C #,default(T)
e não anull
.Integer?
isso significa que é anulável - ver stackoverflow.com/questions/3628757/make-an-integer-nullCType(Nothing, DateTime?
).