Se, IIf() Se()
-
09-06-2019 - |
Pergunta
Eu recentemente fiz uma pergunta sobre IIf vs.Se e descobri que há uma outra função em VB chamado Se que basicamente faz a mesma coisa que IIf mas é um curto-circuito.
Faz isso Se a função de executar melhor do que o IIf função?O Se declaração de superar a Se e IIf funções?
Solução
Porra, eu realmente pensei que você estava falando sobre o operador, ao longo de todo.;-) Enfim ...
Faz isso, Se a função de executar melhor do que a função IIf?
Definitivamente.Lembre-se, ele é construído na linguagem.Apenas um dos dois condicional argumentos tem que ser avaliado, o que pode economizar um alto custo de operação.
A instrução Se superam a Se e funções IIf?
Eu acho que você não pode comparar os dois, porque eles fazem coisas diferentes.Se o seu código semanticamente executa uma tarefa que deve enfatizar isso, em vez da tomada de decisão.Use o If
operador aqui em vez da instrução.Isto é especialmente verdadeiro se você pode usá-lo na inicialização de uma variável, pois caso contrário, a variável será padrão inicializado, resultando em mais lento código:
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
Outras dicas
Um muito importante distintas entre IIf()
e If()
é que, com Option Infer On
a tarde vai converter implicitamente os resultados para o mesmo tipo de dados em determinados casos, como, onde IIf
vai voltar Object
.
Exemplo:
Dim val As Integer = -1
Dim iifVal As Object, ifVal As Object
iifVal = IIf(val >= 0, val, Nothing)
ifVal = If(val >= 0, val, Nothing)
Saída:
iifVal
tem valor de Nada e de tipo de Objecto
ifVal
tem o valor 0 e o tipo Integer, b/c é implicitamente a conversão de Nada para um número Inteiro.