web-dev-qa-db-fra.com

Une instruction IF cessera-t-elle d'évaluer si elle échoue à la première condition?

Si j'ai une déclaration If avec 2 conditions - et la première échoue, la deuxième condition sera-t-elle même prise en compte ou ira-t-elle directement à la variable else? Ainsi, dans l'exemple suivant, si myList.Count == 0, myString sera comparé à "valeur" ou sera-t-il simplement droit à else?

if(myList.Count > 0 && myString.Equals("value"))
{
//Do something
}
else
{
//Do something else
}
47
user1017882

Il cessera d'évaluer car vous utilisez l'opérateur double esperluette &&. Cela s'appelle court-circuiter .

Si vous l'avez changé en une seule esperluette:

if(myList.Count > 0 & myString.Equals("value"))

cela évaluerait les deux. 

75
Paul Spangle

Non, cela ne sera pas pris en compte. (Ceci est connu comme court-circuit .)

Le compilateur est suffisamment intelligent (et requis par la spécification du langage) pour savoir que si la première condition est false, il n’existe aucun moyen d’évaluer la valeur true.

Et comme l'a souligné Jacob pour ||, lorsque la première condition est true, la seconde condition ne sera pas évaluée.

20
MBen

Si l'opérateur logique est AND (&&), l'instruction IF évaluerait la première expression. Si la première est fausse, la seconde n'est pas évaluée. Ceci est utile pour vérifier si la variable est null avant d'appeler la méthode sur la référence - pour éviter une exception de pointeur null

Si l'opérateur logique est OR (||), l'instruction IF évaluerait la première expression. Si la première est vraie, elle n'évalue pas la seconde. 

Les compilateurs et les runtimes sont optimisés pour ce comportement

7
Rutesh Makhijani

Non, la deuxième condition sera ignorée si vous utilisez &&,

Si vous utilisez &, il sera considéré

4
Jigar Joshi

Considérer ce qui suit:

static int? x;
static int? y;

static void Main(string[] args)
{
    x = 5;
    if (testx() & testy())
    {
        Console.WriteLine("test");
    }
}

static Boolean testx()
{
    return x == 3;
}

static Boolean testy()
{
    return y == 10;
}

Si vous tracez à la fois les fonctions testx et testy sont évaluées même si testx était faux.

Si vous modifiez le test en &&, seul le premier est coché.

2
BugFinder

Dans votre exemple, la deuxième instruction ne sera évaluée que si la première échoue. Le AND logique && renverra uniquement true lorsque les deux opérandes sont vrais, à savoir évaluation du court-circuit .

1
dtsg

.NET prend en charge short circuiting. Ainsi, lorsque la première condition échoue, il ne vérifie pas la deuxième condition .... En C # || et && sont les versions court-circuitées des opérateurs logiques | et & respectivement .... Il est souvent plus rapide aussi ...

1
Akash KC

L'expression sera évaluée de gauche à droite car il s'agit d'une opération AND logique. Si false, cela arrêtera l'évaluation. Il a également la plus grande priorité des opérations dans votre expression.

L'opérateur AND conditionnel (&&) effectue un opérateur AND logique de ses opérandes bool, mais n'évalue que son second opérande si nécessaire. Conditionnel et opérateur (&&) MSDN

Voici un ensemble de sections listant les opérateurs C # commençant par la priorité la plus élevée au plus bas .

0
Travis J