visual not net else .net vb.net if-statement iif-function

.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.