VB.NET – IsNothing versus Is Nothing

Est-ce que quelqu’un ici utilise VB.NET et a une forte préférence 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-il acceptable de les mélanger?

    Si vous regardez le MSIL en cours d’exécution, vous verrez qu’il ne comstack pas exactement le même code. Lorsque vous utilisez IsNothing (), il lance un appel à cette méthode, au lieu de simplement évaluer l’expression.

    La raison pour laquelle j’aurais tendance à utiliser “Is Nothing” est que je nie que cela devienne “IsNot Nothing” plutôt que “Not IsNothing (object)”, ce qui me semble personnellement plus lisible.

    Je trouve que Pasortingck Steele a mieux répondu à cette question sur son blog: Eviter IsNothing ()

    Je n’ai pas copié sa réponse ici, pour s’assurer que Pasortingck Steele obtienne le crédit pour son poste. Mais je pense que si vous essayez de décider d’utiliser Is Nothing ou IsNothing, vous devriez lire son post. Je pense que vous serez d’accord avec le fait que Rien n’est le meilleur choix.

    Je suis d’accord avec “Is Nothing”. Comme indiqué ci-dessus, il est facile de nier avec “IsNot Nothing”.

    Je trouve cela plus facile à lire …

     If printDialog IsNot Nothing Then 'blah End If 

    que cela …

     If Not obj Is Nothing Then 'blah End If 

    Vous devriez absolument éviter d’utiliser IsNothing()

    Voici 4 raisons de l’article IsNothing () VS Is Nothing

    1. Plus important encore, IsNothing(object) a tout ce qui lui est passé en tant qu’object, même les types de valeur! Puisque les types de valeur ne peuvent pas être Nothing , c’est un chèque complètement perdu.
      Prenons l’exemple suivant:

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

      Cela va comstackr et bien fonctionner, alors que ceci:

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

      Ne comstackra pas, à la place le compilateur générera l’erreur:

      L’opérateur ‘Is’ n’accepte pas les opérandes de type ‘Integer’.
      Les opérandes doivent être des types référence ou nullable.

    2. IsNothing(object) fait en réalité partie de Microsoft.VisualBasic.dll .
      Cela est indésirable car vous avez une dépendance inutile sur la bibliothèque VisualBasic.

    3. C’est lent – 33,76% plus lent en fait (plus de 1000000000 itérations)!

    4. Peut-être une préférence personnelle, mais IsNothing() lit comme une condition Yoda . Lorsque vous examinez une variable, vous contrôlez son état, l’object de votre enquête.

      ie fait- il x? — NON Xing en est-il une propriété?

      Donc, je pense que If a IsNot Nothing lit mieux que If Not IsNothing(a)

    VB est plein de choses comme ça, essayant de le rendre à la fois “comme l’anglais” et confortable pour les personnes habituées aux langages qui utilisent () et {} beaucoup. Par exemple, du côté “comme 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 la plupart du temps, vous pouvez utiliser () avec des appels de fonction si vous le souhaitez, mais vous n’êtes pas obligé de le faire.

    Je préfère IsNothing () … mais j’utilise C et C #, ce qui est confortable. Et je pense que c’est plus lisible. Mais va avec ce qui te semble le plus confortable.

    Je me penche vers l’alternative “Is Nothing”, principalement parce qu’elle semble plus OO.

    Visiblement, Visual Basic n’a pas le mot-clé Ain’t.

    J’ai aussi tendance à utiliser partiellement la version Is Nothing en l’utilisant autant qu’en SQL.

    J’ai initialement utilisé IsNothing, mais je me suis orienté vers l’utilisation de Is Nothing dans les nouveaux projets, principalement pour la lisibilité. La seule fois où je rest avec IsNothing, c’est si je maintiens le code là où il est utilisé et que je veux restr cohérent.

    Is Nothing requirejs un object qui a été assigné à la valeur Nothing. 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é.