VB.NET -IsNothing versus Is Nothing

est-ce que quelqu'un ici utilise VB.NET et ont une préférence marquée pour ou contre l'utilisation de IsNothing par opposition à Is Nothing (par exemple, If IsNothing(anObject) ou If anObject Is Nothing... )? Si oui, pourquoi?

EDIT: si vous pensez qu'ils sont tous les deux également acceptables, pensez-vous qu'il est préférable d'en choisir un et de s'y tenir, ou est-ce que c'est bien de les mélanger?

120
demandé sur Mark Hurd 2008-08-08 13:45:29

9 réponses

si vous regardez le MSIL pendant son exécution, vous verrez qu'il ne se compile pas exactement au même code. Quand vous utilisez IsNothing () il fait en fait un appel à cette méthode au lieu de simplement évaluer l'expression.

la raison pour laquelle j'aurais tendance à me pencher vers l'utilisation de" Is Nothing "est quand je nie qu'il devient "IsNot Nothing" plutôt que "Not IsNothing(object)" que je me sens personnellement semble plus lisible.

113
répondu lomaxx 2008-08-08 12:28:37

je trouve que Patrick Steele , a répondu à cette question, le meilleur sur son blog: , en Évitant IsNothing()

Je n'ai copié aucune de ses réponses ici, pour assurer Patrick Steele obtenir le crédit de son poste. Mais je pense que si vous essayez de décider si utiliser N'est rien ou rien, vous devriez lire son post. Je pense que vous conviendrez que rien n'est le meilleur choix.

40
répondu Jack Snipes 2008-08-11 14:12:57

je suis d'accord avec "n'Est Rien". Comme indiqué ci-dessus, il est facile de nier avec "IsNot rien".

je trouve cela plus facile à lire...

If printDialog IsNot Nothing Then
    'blah
End If

que ça...

If Not obj Is Nothing Then
    'blah
End If
27
répondu proudgeekdad 2008-08-08 13:11:51

vous devez absolument éviter d'utiliser IsNothing()

Voici 4 raisons de l'article IsNothing () VS Isnothing

"
  1. le plus important, IsNothing(object) a tout passé à lui comme un objet, même les types de valeur! Puisque les types de valeurs ne peuvent pas être Nothing , c'est un contrôle complètement perdu.

    Prendre l'exemple suivant:

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

    cela compilera et fonctionnera bien, alors que cela:

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

    ne compilera pas, mais le compilateur soulèvera l'erreur:

    ' Is 'l'opérateur n'accepte pas les opérandes de type'entier'.

    Les opérandes doivent être de type référence ou nul.

  2. IsNothing(object) est en fait une partie du Microsoft.VisualBasic.dll .

    Ceci n'est pas souhaitable car vous avez une dépendance inutile sur la bibliothèque VisualBasic.

  3. son lent-33,76% plus lent en fait (plus de 1000000000 itérations)!

  4. peut-être préférence personnelle, mais IsNothing() se lit comme un Condition Yoda . Quand vous regardez une variable, vous vérifiez son état, avec elle comme le l'objet de votre enquête.

    i.e. est-ce que it do x? --- et non est-ce que x est une propriété de it ?

    donc je pense que If a IsNot Nothing se lit mieux que If Not IsNothing(a)

27
répondu KyleMit 2014-06-30 16:07:10

VB est plein de choses comme cela essayer de faire à la fois "comme l'anglais" et confortable pour les gens qui sont habitués à des langues qui utilisent () et {} beaucoup. Par exemple, du côté"j'aime l'anglais"...VB a le mot-clé Ain't "...et non, je ne plaisante pas. Et de l'autre côté, comme vous le savez probablement déjà la plupart du temps, vous pouvez utiliser () avec les appels de fonction si vous le voulez, mais ne le devez pas.

je préfère IsNothing()...mais j'utilise le C et le C#, donc c'est juste ce qui est confortable. Et je pense que c'est plus lisible. Mais va avec ce qui te semble le plus à l'aise.

6
répondu Adam Haile 2008-08-08 09:49:51

je penche pour l'alternative "N'est rien", principalement parce qu'il semble plus OO.

Sûrement Visual Basic n'est pas a obtenu la n'est pas le mot clé.

6
répondu deadtime 2008-08-08 10:57:27

j'ai aussi tendance à utiliser partiellement la version Is Nothing en L'utilisant autant que je le fais en SQL.

2
répondu Brian Childress 2008-08-08 12:29:25

j'ai d'abord utilisé IsNothing, mais je suis passé à l'utilisation est rien dans les nouveaux projets, principalement pour la lisibilité. La seule fois où je m'en tiens à rien, c'est si je garde le code là où il est utilisé et je veux rester cohérent.

1
répondu Chris Tybur 2008-08-08 13:24:51

n'Est Rien d'nécessite un objet qui a été attribuée à la valeur de Rien. IsNothing () peut prendre n'importe quelle variable qui n'a pas été initialisée, y compris de type numérique. Ceci est utile par exemple pour tester si un paramètre optionnel a été passé.

-2
répondu ybacou 2016-03-06 04:23:28