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?
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.
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.
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
vous devez absolument éviter d'utiliser IsNothing()
Voici 4 raisons de l'article IsNothing () VS Isnothing
"-
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 êtreNothing
, 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. -
IsNothing(object)
est en fait une partie duMicrosoft.VisualBasic.dll
.
Ceci n'est pas souhaitable car vous avez une dépendance inutile sur la bibliothèque VisualBasic. -
son lent-33,76% plus lent en fait (plus de 1000000000 itérations)!
-
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 queIf Not IsNothing(a)
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.
j'ai aussi tendance à utiliser partiellement la version Is Nothing en L'utilisant autant que je le fais en SQL.
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.
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é.