Pergunta

Alguém aqui usa VB.NET e têm uma forte preferência por ou contra o uso de IsNothing em oposição a Is Nothing (por exemplo, If IsNothing(anObject) ou If anObject Is Nothing...)?Se assim for, por quê?

EDITAR:Se você acha que eles são ambos igualmente aceitável, você acha que é melhor para escolher um e ficar com ele, ou é OK para misturá-los?

Foi útil?

Solução

Se você dar uma olhada em MSIL, como ele está sendo executado, você verá que ele não compile até o exato mesmo código.Quando você usar IsNothing() ele realmente faz uma chamada a esse método em vez de simplesmente avaliar a expressão.

A razão de eu tendem a inclinar-se para utilizar o "Nada" é quando eu estou negando, torna-se "IsNot Nada" em vez de "Não IsNothing(objeto)" o que eu, pessoalmente, sinto parece mais legível.

Outras dicas

Eu acho que a Patrick Steele responderam a esta questão, o melhor em seu blog: Evitando IsNothing()

Eu não copiar qualquer de sua resposta aqui, para garantir Patrick Steele obter crédito para o seu post.Mas eu acho que se você está tentando decidir se É Nada, ou IsNothing você deve ler o seu post.Eu acho que você vai concordar que não É Nada, é a melhor escolha.

Editar - VoteCoffe comentário aqui

Parcial do conteúdo do artigo:Depois de analisar mais de código descobri outra razão que você deve evitar isso:Ele aceita tipos de valor!Obviamente, desde IsNothing() é uma função que aceita um 'objeto', você pode passar qualquer coisa que você quiser.Se é um tipo de valor .NET caixa-lo em um objeto e passar para o IsNothing -- que sempre retornará false em uma caixa valor!O VB.NET compilador irá verificar o "Nada" sintaxe de estilo e não de compilação se você tentar fazer um "Nada" em um tipo de valor.Mas o IsNothing() função compila sem reclamações.-PSteele – VoteCoffee

Você deve absolutamente evitar o uso de IsNothing()

Aqui estão 4 razões a partir do artigo IsNothing() VS É Nada

  1. O mais importante, IsNothing(object) tem tudo o que passou para ela como um objeto, até mesmo tipos de valor!Desde tipos de valor não pode ser Nothing, é uma experiência completamente desperdiçado de seleção.
    Tome o seguinte exemplo:

    Dim i As Integer
    If IsNothing(i) Then
       ' Do something 
    End If
    

    Isto irá compilar e executar a multa, considerando que a presente:

    Dim i As Integer
    If i Is Nothing Then
        '   Do something 
    End If
    

    Não irá compilar, em vez disso, o compilador irá gerar o erro:

    'É' operador não aceita operandos do tipo 'Inteiro'.
    Operandos devem ser de referência ou tipos anuláveis.

  2. IsNothing(object) é, na verdade, da parte da Microsoft.VisualBasic.dll.
    Isso é indesejável, como você tem uma desnecessários dependência no VisualBasic biblioteca.

  3. Sua lenta 33.76% mais lento no fato de (mais 1000000000 iterações)!

  4. Talvez preferência pessoal, mas IsNothing() lê-se como um Yoda Condição.Quando você olha para uma variável que está verificando o seu estado, com ele como objeto de sua investigação.

    i.e.não ele fazer x?--- NÃO É xing uma propriedade de ele?

    Então eu acho que If a IsNot Nothing lê melhor do que If Not IsNothing(a)

Eu concordo com o "não É Nada".Como dito acima, é fácil negar com "IsNot Nada".

Eu acho isso mais fácil de ler...

If printDialog IsNot Nothing Then
    'blah
End If

que isso...

If Not obj Is Nothing Then
    'blah
End If

O VB é cheio de coisas, como que tentando fazê-lo ", tal como o inglês" e confortável para as pessoas que são utilizados para idiomas que usam () e {} muito.Por exemplo, no "como"do lado...o VB tem o "Não"palavra-chave...e não, eu não estou brincando.E, por outro lado, como você provavelmente já sabe que a maioria do tempo que você pode usar () com a função de chamadas se você quiser, mas não precisa.

Eu prefiro IsNothing()...mas eu uso o C e C#, de forma que apenas o que é confortável.E eu acho que é mais legível.Mas ir com o que se sente mais confortável para você.

Eu estou inclinado para o "Nada" alternativa, principalmente porque ele parece mais OO.

Certamente O Visual Basic não tenho a não palavra-chave.

Eu também tendem a usar a Nada versão parcial de usá-lo tanto como eu fazer em SQL.

Eu inicialmente utilizado IsNothing mas eu fui caminhar no sentido de usar É Nada em projetos mais recentes, principalmente para facilitar a leitura.A única vez que eu ficar com IsNothing é se eu estou mantendo o código onde que é utilizada em todo e eu quero ficar consistente.

Não é Nada, requer um objeto que foi atribuído o valor de Nada.IsNothing() pode tomar qualquer variável que não foi inicializado, incluindo de tipo numérico.Isso é útil, por exemplo, quando o teste se um parâmetro opcional tiver sido transmitida.

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