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
}
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.
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.
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
Non, la deuxième condition sera ignorée si vous utilisez &&
,
Si vous utilisez &
, il sera considéré
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é.
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 .
.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 ...
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 .