.net - not - if else if vb net
If, IIf() y If() (2)
Maldita sea, realmente pensé que hablabas del operador todo el tiempo. ;-) De todas formas …
¿Funciona esta función If mejor que la función IIf?
Seguro. Recuerde, está integrado en el lenguaje. Solo se debe evaluar uno de los dos argumentos condicionales, lo que podría ahorrar una operación costosa.
¿La declaración If prevalece sobre las funciones If y IIf?
Creo que no puedes comparar los dos porque hacen cosas diferentes. Si su código realiza semánticamente una tarea, debe enfatizar esto, en lugar de la toma de decisiones. Use el operador If
aquí en lugar de la instrucción. Esto es especialmente cierto si puede usarlo en la inicialización de una variable porque, de lo contrario, la variable se inicializará por defecto, lo que dará como resultado un código más lento:
Dim result = If(a > 0, Math.Sqrt(a), -1.0)
'' versus
Dim result As Double '' Redundant default initialization!
If a > 0 Then
result = Math.Sqrt(a)
Else
result = -1
End If
Hace poco hice una pregunta sobre IIf vs. If y descubrí que hay otra función en VB llamada If que básicamente hace lo mismo que IIf pero es un cortocircuito.
¿Funciona esta función If mejor que la función IIf ? ¿La declaración If prevalece sobre las funciones If y IIf ?
Una diferencia muy importante entre IIf()
y If()
es que con Option Infer On
el último, se emitirán implícitamente los resultados al mismo tipo de datos en ciertos casos, como donde IIf
devolverá Object
.
Ejemplo:
Dim val As Integer = -1
Dim iifVal As Object, ifVal As Object
iifVal = IIf(val >= 0, val, Nothing)
ifVal = If(val >= 0, val, Nothing)
Salida:
iifVal
tiene valor de Nothing y tipo de objeto
ifVal
tiene valor de 0 y tipo de entero, b / c está implícitamente convirtiendo nada en un entero.