Opérateur ?: (référence C#)?: operator (C# reference)

L’opérateur ?:conditionnel , également connu sous le nom d’opérateur conditionnel ternaire, évalue une expression Boolean et true renvoie le résultat de l’une des deux expressions, selon que l’expression Boolean évalue ou false.The conditional operator ?:, also known as the ternary conditional operator, evaluates a Boolean expression and returns the result of one of the two expressions, depending on whether the Boolean expression evaluates to true or false.

Voici la syntaxe de l'opérateur conditionnel :The syntax for the conditional operator is as follows:

condition ? consequent : alternative

L'expression condition doit donner true ou false.The condition expression must evaluate to true or false. Si condition prend la valeur true, l’expression consequent est évaluée et son résultat devient le résultat de l’opération.If condition evaluates to true, the consequent expression is evaluated, and its result becomes the result of the operation. Si condition prend la valeur false, l’expression alternative est évaluée et son résultat devient le résultat de l’opération.If condition evaluates to false, the alternative expression is evaluated, and its result becomes the result of the operation. Soit consequent, soit alternative est évaluée.Only consequent or alternative is evaluated.

Il faut que consequent et alternative soient du même type ou bien qu’une conversion implicite existe d’un type à l’autre.The type of consequent and alternative must be the same, or there must be an implicit conversion from one type to the other.

L’opérateur conditionnel est associatif à droite ; autrement dit, une expression de la forme :The conditional operator is right-associative, that is, an expression of the form

a ? b : c ? d : e

est évaluée comme étantis evaluated as

a ? b : (c ? d : e)

Conseil

Vous pouvez utiliser l’appareil mnémonique suivant pour vous souvenir du mode d’évaluation de l’opérateur conditionnel :You can use the following mnemonic device to remember how the conditional operator is evaluated:

is this condition true ? yes : no

L’exemple suivant illustre l’utilisation de l’opérateur conditionnel :The following example demonstrates the usage of the conditional operator:

double sinc(double x) => x != 0.0 ? Math.Sin(x) / x : 1;

Console.WriteLine(sinc(0.1));
Console.WriteLine(sinc(0.0));
// Output:
// 0.998334166468282
// 1

Expression ref conditionnelleConditional ref expression

Commençant par C 7.2, une variable locale ou réadsible d’arbitre peut être assignée conditionnellement avec l’expression conditionnelle de l’arbitre.Beginning with C# 7.2, a ref local or ref readonly local variable can be assigned conditionally with the conditional ref expression. Vous pouvez également utiliser l’expression conditionnelle de ref comme valeur de retour de référence ou comme argument ref de méthode.You can also use the conditional ref expression as a reference return value or as a ref method argument.

Voici la syntaxe de l'expression ref conditionnelle :The syntax for the conditional ref expression is as follows:

condition ? ref consequent : ref alternative

Comme l’opérateur conditionnel d’origine, l’expression ref conditionnelle n’évalue qu’une des deux expressions : soit consequent, soit alternative.Like the original conditional operator, the conditional ref expression evaluates only one of the two expressions: either consequent or alternative.

Dans le cas de l’expression ref conditionnelle, consequent et alternative doivent être du même type.In the case of the conditional ref expression, the type of consequent and alternative must be the same.

L’exemple suivant illustre l’utilisation de l’expression ref conditionnelle :The following example demonstrates the usage of the conditional ref expression:

var smallArray = new int[] { 1, 2, 3, 4, 5 };
var largeArray = new int[] { 10, 20, 30, 40, 50 };

int index = 7;
ref int refValue = ref ((index < 5) ? ref smallArray[index] : ref largeArray[index - 5]);
refValue = 0;

index = 2;
((index < 5) ? ref smallArray[index] : ref largeArray[index - 5]) = 100;

Console.WriteLine(string.Join(" ", smallArray));
Console.WriteLine(string.Join(" ", largeArray));
// Output:
// 1 2 100 4 5
// 10 20 0 40 50

Opérateur conditionnel et instruction if..elseConditional operator and an if..else statement

L’utilisation de l’opérateur conditionnel au lieu d’une déclaration if-else peut entraîner un code plus concis dans les cas où vous avez besoin conditionnellement pour calculer une valeur.Use of the conditional operator instead of an if-else statement might result in more concise code in cases when you need conditionally to compute a value. L’exemple suivant montre deux façons de classer un entier comme négatif ou non :The following example demonstrates two ways to classify an integer as negative or nonnegative:

int input = new Random().Next(-5, 5);

string classify;
if (input >= 0)
{
    classify = "nonnegative";
}
else
{
    classify = "negative";
}

classify = (input >= 0) ? "nonnegative" : "negative";

Capacité de surcharge de l’opérateurOperator overloadability

Un type défini par l’utilisateur ne peut pas surcharger l’opérateur conditionnel.A user-defined type cannot overload the conditional operator.

spécification du langage C#C# language specification

Pour plus d’informations, voir la section Opérateur conditionnel de la spécification du langage C#.For more information, see the Conditional operator section of the C# language specification.

Pour plus d’informations sur l’expression de l’arbitre conditionnel, voir la note de proposition de fonctionnalité.For more information about the conditional ref expression, see the feature proposal note.

Voir aussiSee also