Pregunta

Hace poco hice una pregunta sobre ISi vs.Si y descubrí que hay otra función en VB llamada Si que básicamente hace lo mismo que si pero es un cortocircuito.

Haz esto Si función funciona mejor que la si ¿función?¿El Si declaración triunfa sobre Si y si funciones?

¿Fue útil?

Solución

Maldita sea, realmente pensé que estabas hablando del operador todo el tiempo.;-) De todos modos …

¿Esta función If funciona mejor que la función IIf?

Definitivamente.Recuerde, está integrado en el idioma.Sólo es necesario evaluar uno de los dos argumentos condicionales, lo que podría ahorrar una operación costosa.

¿La declaración If triunfa sobre las funciones If e IIf?

Creo que no se pueden 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.Utilizar el If operador aquí en lugar de la declaración.Esto es especialmente cierto si puede usarlo en la inicialización de una variable porque, de lo contrario, la variable se inicializará de forma predeterminada, lo que resultará en 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

Otros consejos

Una distinción muy importante entre IIf() y If() es que con Option Infer On el último convertirá implícitamente los resultados al mismo tipo de datos en ciertos casos, como cuando IIf regresará 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)

Producción:
iifVal tiene valor de Nada y tipo de Objeto
ifVal tiene un valor de 0 y tipo de Entero, b/c está convirtiendo implícitamente Nada en un Entero.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top