Domanda

Qualcuno qui usa VB.NET e hanno una forte preferenza per o contro l'uso di IsNothing in contrapposizione a Is Nothing (per esempio, If IsNothing(anObject) o If anObject Is Nothing...)?Se è così, perché?

EDIT:Se si pensa che siano entrambi ugualmente accettabile, pensi che è meglio sceglierne uno e bastone con esso, o è OK per mescolare?

È stato utile?

Soluzione

Se si prende uno sguardo alla MSIL come viene eseguito vedrai che non compilare giù per il codice stesso esatto.Quando si utilizza IsNothing() rende in realtà la chiamata al metodo, anziché limitarsi a valutare l'espressione.

Il motivo tenderei a propendere per l'utilizzo di "non È Niente" è quando sto negando diventa "No Niente "piuttosto che" Non IsNothing(oggetto)", che ritengo personalmente sembra più leggibile.

Altri suggerimenti

Trovo che Patrick Steele risposto a questa domanda meglio sul suo blog: Evitando IsNothing()

Non ho la copia di qualsiasi contenuto della sua risposta, al fine di garantire Patrick Steele ottenere credito per il suo post.Ma penso che se si sta cercando di decidere se utilizzare È Nulla o IsNothing si dovrebbe leggere il suo post.Credo che sarete d'accordo che È Nulla, è la scelta migliore.

Edit - VoteCoffe commento qui

Parziale contenuto dell'articolo:Dopo aver esaminato il codice più ho scoperto un altro motivo si dovrebbe evitare questo:Accetta i tipi di valore!Ovviamente, dato che IsNothing() è una funzione che accetta un "oggetto", si può passare qualsiasi cosa che si desidera farlo.Se si tratta di un tipo di valore .NET casella in oggetto e la passa al IsNothing-che restituisce sempre false per un valore boxed!Il VB.NET compilatore controllare il "non È Niente" stile e la sintassi non compilare se si tenta di eseguire un "non È Niente" su un tipo di valore.Ma il IsNothing() la funzione viene compilato senza reclami.-PSteele – VoteCoffee

Si dovrebbe evitare assolutamente l'utilizzo di IsNothing()

Qui sono 4 motivi dall'articolo IsNothing() VS È Nulla

  1. Ancora più importante, IsNothing(object) ha tutto il passato come un oggetto, anche i tipi di valore!Poiché i tipi di valore non può essere Nothing, è completamente sprecato controllare.
    Prendiamo il seguente esempio:

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

    Questo consentirà di compilare ed eseguire bene, considerando che questo:

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

    Non compilare, invece il compilatore genererà l'errore:

    'È' operatore non accetta operandi di tipo 'Integer'.
    Gli operandi devono essere di riferimento o tipi nullable.

  2. IsNothing(object) in realtà è parte di una parte della Microsoft.VisualBasic.dll.
    Questo è un effetto indesiderato come hai inutili dipendenza di VisualBasic biblioteca.

  3. Il suo lento - 33.76% più lento di fatto (oltre 1000000000 iterazioni)!

  4. Forse preferenza personale, ma IsNothing() si legge come un Yoda Condizione.Quando si guarda a una variabile si usa il controllo è stato, come oggetto della vostra indagine.

    cioènon si fare x?--- NON È xing", di proprietà di si?

    Quindi penso che If a IsNot Nothing legge meglio di If Not IsNothing(a)

Sono d'accordo con "non È Niente".Come detto sopra, è facile negare con "IsNot Nothing".

Trovo che questo sia più facile da leggere...

If printDialog IsNot Nothing Then
    'blah
End If

rispetto a questo...

If Not obj Is Nothing Then
    'blah
End If

VB è pieno di cose del genere, cercando sia "come l'inglese" e confortevole per le persone che vengono utilizzati per le lingue che utilizzano () e {} un sacco.Per esempio, sul "come l'inglese"lato...VB è il "Non"la parola chiave...e no, non sto scherzando.E, d'altro lato, come probabilmente già sai la maggior parte del tempo è possibile utilizzare () con la funzione chiama se vuoi, ma non è necessario.

Io preferisco IsNothing()...ma io uso C e C#, in modo che solo ciò che è comodo.E credo che sia più leggibile.Ma vai con quello che si sente più comodo per voi.

Sto appoggiato verso il "non È Niente" alternativa, soprattutto perché sembra più OO.

Sicuramente Visual Basic non ottenuto non e ' una parola chiave.

Ho anche tendono ad utilizzare le È Niente di versione parzialmente utilizzando quanto a me in SQL.

Inizialmente ho utilizzato IsNothing ma sto muovendo verso l'utilizzo È Nulla in progetti più recenti, principalmente per migliorare la leggibilità.L'unica volta che ho bastone con IsNothing è che se io sono il mantenimento di codice in cui è utilizzato in tutto e voglio rimanere coerenti.

Si richiede Niente di un oggetto che è stato assegnato il valore di Niente.IsNothing() può prendere qualsiasi variabile che non è stata inizializzata, anche di tipo numerico.Questo è utile per esempio quando il test, se un parametro opzionale è stato superato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top