Quelle est la différence entre et et aussi dans VB.NET Je ne sais pas.

In VB.NET, Quelle est la différence entre And et AndAlso ? Qui dois-je utiliser?

220
demandé sur Peter Mortensen 2008-11-19 17:36:44

10 réponses

l'opérateur And évalue les deux côtés, où AndAlso évalue le côté droit si et seulement si le côté gauche est vrai.

un exemple:

If mystring IsNot Nothing And mystring.Contains("Foo") Then
  ' bla bla
End If

ci-dessus renvoie une exception si mystring = Nothing

If mystring IsNot Nothing AndAlso mystring.Contains("Foo") Then
  ' bla bla
End If

celui-ci ne jette pas une exception.

donc si vous venez du C # world, vous devez utiliser AndAlso comme vous utiliseriez && .

plus d'informations ici: http://www.panopticoncentral.net/2003/08/18/the-ballad-of-andalso-and-orelse /

336
répondu Nico 2015-04-21 10:10:19

l'opérateur And vérifiera toutes les conditions de l'énoncé avant de continuer, tandis que L'opérateur Andalso s'arrêtera s'il sait que la condition est fausse. Par exemple:

if x = 5 And y = 7

vérifie si x est égal à 5, et si y est égal à 7, alors continue si les deux sont vrais.

if x = 5 AndAlso y = 7

vérifie si x est égal à 5. Si ce n'est pas le cas, il ne vérifie pas si y est 7, parce qu'il sait que la condition est déjà fausse. (Ce qui est appelé de court-circuit.)

généralement, les gens utilisent la méthode du court-circuitage s'il y a une raison de ne pas vérifier explicitement la deuxième partie si la première partie n'est pas vraie, comme si elle lancerait une exception si elle était cochée. Par exemple:

If Not Object Is Nothing AndAlso Object.Load()

si celle-ci utilisait And au lieu de AndAlso , elle essaierait toujours de Object.Load() même si elle était nothing , ce qui lancerait une exception.

28
répondu Ed Marty 2016-09-07 20:47:48

fait intéressant, aucune des réponses ne mentionnait que And et Or en VB.NET sont des opérateurs de bits alors que OrElse et AndAlso sont strictement des opérateurs booléens.

Dim a = 3 OR 5 ' Will set a to the value 7, 011 or 101 = 111
Dim a = 3 And 5 ' Will set a to the value 1, 011 and 101 = 001
Dim b = 3 OrElse 5 ' Will set b to the value true and not evaluate the 5
Dim b = 3 AndAlso 5 ' Will set b to the value true after evaluating the 5
Dim c = 0 AndAlso 5 ' Will set c to the value false and not evaluate the 5

Note : un entier non Zéro est considéré comme true ; Dim e = not 0 va mettre e à -1 démontrant Not est aussi un opérateur de bit.

|| et && (la C # versions de OrElse et AndAlso ) retourner la dernière expression évaluée qui serait 3 et 5 respectivement. Cela vous permet d'utiliser l'idiome v || 5 dans C# pour donner 5 comme valeur de l'expression quand v est null ou ( 0 et un entier) et la valeur de v autrement. La différence dans la sémantique peut attraper un programmeur C# VB.NET off guard comme cet "idiom valeur par défaut" ne fonctionne pas dans VB.NET.

ainsi, pour répondre à la question : utilisez Or et And pour les opérations de bits (entier ou booléen). Utilisez OrElse et AndAlso pour" court-circuiter " une opération pour gagner du temps, ou tester la validité d'une évaluation avant de l'évaluer. If valid(evaluation) andalso evaluation then ou if not (unsafe(evaluation) orelse (not evaluation)) then

Bonus: Quelle est la valeur de ce qui suit?

Dim e = Not 0 And 3
13
répondu Charles Jacks 2016-09-07 20:54:50
If Bool1 And Bool2 Then

évalue Bool1 et Bool2

If Bool1 AndAlso Bool2 Then

évalue Bool2 si et seulement si Bool1 est vrai.

12
répondu Bryan Anderson 2008-11-19 14:42:59

juste pour tous ceux qui disent que les effets secondaires sont mauvais: un endroit où avoir deux effets secondaires dans une condition est bon serait de lire deux objets de fichier en tandem.

While File1.Seek_Next_Row() And File2.Seek_Next_Row()
    Str1 = File1.GetRow()
    Str2 = File2.GetRow()
End While

L'Utilisation du And garantit qu'une rangée est consommée chaque fois que l'état est vérifié. Tandis que AndAlso pourrait lire la dernière ligne de File1 et laisser File2 sans ligne consommée.

bien sûr le code ci-dessus ne fonctionnerait pas, mais je utilisez des effets secondaires comme celui-ci tout le temps et ne considérerait pas comme " mauvais " ou " mal " code que certains vous conduirait à croire. Il est facile à lire et efficace.

12
répondu Ian 2013-05-17 17:44:20

une façon simple d'y penser est d'utiliser un Anglais encore plus simple

If Bool1 And Bool2 Then
If [both are true] Then


If Bool1 AndAlso Bool2 Then
If [first is true then evaluate the second] Then
4
répondu rbrill 2011-12-14 10:44:51

AndAlso est proche Et, sauf qu'il fonctionne comme && en C#, C++, etc.

la différence est que si la première clause (celle qui précède L'Andalousie) est vraie, la seconde clause n'est jamais évaluée - l'expression logique composée est"court-circuité".

ceci est parfois très utile, par exemple dans une expression telle que:

If Not IsNull(myObj) AndAlso myObj.SomeProperty = 3 Then
   ...
End If

en utilisant l'ancienne et dans l'expression ci-dessus lancerait une NullReferenceException si myObj sont nulles.

4
répondu Tor Haugen 2016-09-07 20:50:05

Voir Aussi débordement de la pile question: devrais-je toujours utiliser les opérateurs AndAlso et OrElse? .

Aussi: Un commentaire pour ceux qui ont mentionné l'aide de And si la partie droite de l'expression est un des effets secondaires dont vous avez besoin:

si le côté droit a un effet secondaire dont vous avez besoin, il suffit de le déplacer vers le côté gauche plutôt que d'utiliser "et". Vous avez seulement vraiment besoin de " et " si les deux les côtés ont des effets secondaires. Et si vous avez autant d'effets secondaires, vous faites probablement quelque chose de mal. En général, vous devriez vraiment préférer aussi.

4
répondu Joel Coehoorn 2017-05-23 12:18:22

en plus des réponses ci-dessus, AndAlso fournit un processus de conditionnement connu sous le nom de court-circuitage. De nombreux langages de programmation ont cette fonctionnalité intégrée comme vb.net permet, et peut fournir des augmentations substantielles de performance dans les énoncés de condition longue en découpant les évaluations qui ne sont pas nécessaires.

une autre condition similaire est la condition OrElse qui ne vérifierait la bonne condition que si la condition gauche est fausse, coupant ainsi vérifications non essentielles de l'état une fois qu'un État véritable a été trouvé.

je vous conseille de toujours utiliser des processus de court-circuitage et de structurer vos énoncés conditionnels de manière à en tirer le plus grand profit. Par exemple, testez d'abord vos conditions les plus efficaces et les plus rapides de sorte que vous n'exécutez vos conditions longues que lorsque vous devez absolument et court-circuitez les autres fois.

2
répondu davidallyoung 2014-08-16 19:01:56

pour la majorité D'entre nous OrElse et AndAlso fera l'affaire sauf pour quelques exceptions confuses (moins de 1% où nous pouvons avoir à utiliser ou et et).

essayez de ne pas vous laisser emporter par les gens qui montrent leur logique booléenne et qui la font passer pour une science de fusée.

c'est assez simple et simple et parfois votre système peut ne pas fonctionner comme prévu parce qu'il n'aime pas votre logique en premier lieu. Et pourtant ton cerveau il n'arrête pas de vous dire que sa logique est 100% testée et prouvée et qu'elle devrait fonctionner. À ce moment précis, arrêtez de faire confiance à votre cerveau et lui demander de réfléchir à nouveau ou (pas OrElse ou peut-être OrElse) vous forcer à chercher un autre emploi qui ne nécessite pas beaucoup de logique.

0
répondu Anand 2015-06-11 17:41:35