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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top