?: Operatore (Riferimenti per C#)?: Operator (C# Reference)

L'operatore condizionale ?:, comunemente noto come operatore condizionale ternario, valuta un'espressione booleana e restituisce il risultato della valutazione di una di due espressioni, a seconda che l'espressione booleana restituisca true o false.The conditional operator ?:, commonly known as the ternary conditional operator, evaluates a Boolean expression, and returns the result of evaluating one of two expressions, depending on whether the Boolean expression evaluates to true or false. A partire da C# 7.2, l'espressione condizionale ref restituisce il riferimento al risultato di una delle due espressioni.Beginning with C# 7.2, the conditional ref expression returns the reference to the result of one of the two expressions.

La sintassi dell'operatore condizionale è la seguente:The syntax for the conditional operator is as follows:

condition ? consequent : alternative

L'espressione condition deve restituire true o false.The condition expression must evaluate to true or false. Se condition restituisce true, viene valutata l'espressione consequent e il suo risultato diventa il risultato dell'operazione.If condition evaluates to true, the consequent expression is evaluated, and its result becomes the result of the operation. Se condition restituisce false, viene valutata l'espressione alternative e il suo risultato diventa il risultato dell'operazione.If condition evaluates to false, the alternative expression is evaluated, and its result becomes the result of the operation. Viene valutata solo consequent o solo alternative.Only consequent or alternative is evaluated.

Il tipo di consequent e alternative deve corrispondere oppure deve essere presente una conversione implicita da un tipo all'altro.The type of consequent and alternative must be the same, or there must be an implicit conversion from one type to the other.

L'operatore condizionale si associa all'operando a destra, che significa che un'espressione nel formatoThe conditional operator is right-associative, that is, an expression of the form

a ? b : c ? d : e

viene valutata comeis evaluated as

a ? b : (c ? d : e)

Suggerimento

Un modo per ricordarsi che cosa restituisce questo operatore è il seguente:You can use the following mnemonic device to remember how the conditional operator is evaluated:

is this condition true ? yes : no

L'esempio seguente illustra l'uso dell'operatore condizionale: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

Espressione condizionale refConditional ref expression

A partire da C# 7.2, è possibile usare l'espressione condizionale ref per restituire il riferimento al risultato di una delle due espressioni.Beginning with C# 7.2, you can use the conditional ref expression to return the reference to the result of one of the two expressions. È possibile assegnare tale riferimento a una variabile locale ref o locale ref readonly oppure usarlo come valore restituito di riferimento o come parametro del metodo ref.You can assign that reference to a ref local or ref readonly local variable, or use it as a reference return value or as a ref method parameter.

La sintassi dell'espressione condizionale ref è la seguente:The syntax for the conditional ref expression is as follows:

condition ? ref consequent : ref alternative

Come l'operatore condizionale originale, l'espressione condizionale ref valuta solo una delle due espressioni: consequent o alternative.Like the original conditional operator, the conditional ref expression evaluates only one of the two expressions: either consequent or alternative.

Nel caso dell'espressione condizionale ref, il tipo di consequent e alternative deve coincidere.In the case of the conditional ref expression, the type of consequent and alternative must be the same.

L'esempio seguente illustra l'uso dell'espressione condizionale ref: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

Per altre informazioni, vedere la nota relativa alla proposta di funzionalità.For more information, see the feature proposal note.

Operatore condizionale e istruzione if..elseConditional operator and an if..else statement

L'uso dell'operatore condizionale su un'istruzione if-else potrebbe generare codice più conciso nel casi in cui occorre calcolare un valore in modo condizionale.Use of the conditional operator over an if-else statement might result in more concise code in cases when you need conditionally to compute a value. L'esempio seguente illustra due modi di classificare un intero come negativo o non negativo: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";

Overload degli operatoriOperator overloadability

Non è possibile eseguire l'overload dell'operatore condizionale.The conditional operator cannot be overloaded.

Specifiche del linguaggio C#C# language specification

Per altre informazioni, vedere la sezione Operatore condizionale della specifica del linguaggio C#.For more information, see the Conditional operator section of the C# language specification.

Vedere ancheSee also