?: — operatorC# (odwołanie)?: operator (C# reference)

Operator warunkowy ?:, nazywany również operatorem warunkowym Trzyelementowy, oblicza wyrażenie logiczne i zwraca wynik jednego z dwóch wyrażeń, w zależności od tego, czy wyrażenie logiczne ma być szacowane do true, czy 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. Począwszy od C# 7,2, wyrażenie warunkowe zwraca odwołanie do wyniku jednego z dwóch wyrażeń.Beginning with C# 7.2, the conditional ref expression returns the reference to the result of one of the two expressions.

Składnia operatora warunkowego jest następująca:The syntax for the conditional operator is as follows:

condition ? consequent : alternative

Wyrażenie condition musi być szacowane do true lub false.The condition expression must evaluate to true or false. Jeśli condition oblicza true, zostanie obliczone wyrażenie consequent, a jego wynik zmieni się na wynik operacji.If condition evaluates to true, the consequent expression is evaluated, and its result becomes the result of the operation. Jeśli condition oblicza false, zostanie obliczone wyrażenie alternative, a jego wynik zmieni się na wynik operacji.If condition evaluates to false, the alternative expression is evaluated, and its result becomes the result of the operation. Oceniane są tylko consequent lub alternative.Only consequent or alternative is evaluated.

Typ consequent i alternative musi być taki sam lub musi być niejawną konwersją z jednego typu na drugi.The type of consequent and alternative must be the same, or there must be an implicit conversion from one type to the other.

Operator warunkowy jest prawym przyciskiem asocjacyjnym, czyli wyrażeniem formularzaThe conditional operator is right-associative, that is, an expression of the form

a ? b : c ? d : e

jest wykonywane jakois evaluated as

a ? b : (c ? d : e)

Porada

Poniższego urządzenia można użyć do zapamiętania, jak jest oceniany operator warunkowy:You can use the following mnemonic device to remember how the conditional operator is evaluated:

is this condition true ? yes : no

Poniższy przykład ilustruje użycie operatora warunkowego: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

Wyrażenie warunkowe refConditional ref expression

Począwszy od C# 7,2, można użyć wyrażenia ref warunkowego do zwrócenia odwołania do wyniku jednego z dwóch wyrażeń.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. Można przypisać to odwołanie do zmiennej lokalnej ref lub ref lokalnego tylko do odczytu lub użyć jej jako wartości zwracanej przez odwołanie lub jako parametru metodyref.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.

Składnia wyrażenia ref warunkowego jest następująca:The syntax for the conditional ref expression is as follows:

condition ? ref consequent : ref alternative

Podobnie jak w przypadku oryginalnego operatora warunkowego wyrażenie ref oblicza tylko jeden z dwóch wyrażeń: consequent lub alternative.Like the original conditional operator, the conditional ref expression evaluates only one of the two expressions: either consequent or alternative.

W przypadku wyrażenia ref warunkowego typ consequent i alternative muszą być takie same.In the case of the conditional ref expression, the type of consequent and alternative must be the same.

Poniższy przykład demonstruje użycie warunkowego wyrażenia 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

Operator warunkowy i instrukcja if..elseConditional operator and an if..else statement

Użycie operatora warunkowego zamiast instrukcji if-else może spowodować bardziej zwięzły kod w przypadkach, gdy konieczne jest warunkowe obliczenie wartości.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. Poniższy przykład ilustruje dwa sposoby klasyfikowania liczby całkowitej jako ujemnej lub nieujemnej: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";

Przeciążanie operatoraOperator overloadability

Typ zdefiniowany przez użytkownika nie może przeciążać operatora warunkowego.A user-defined type cannot overload the conditional operator.

specyfikacja języka C#C# language specification

Aby uzyskać więcej informacji, zobacz sekcję warunkowego operatora C# specyfikacji języka.For more information, see the Conditional operator section of the C# language specification.

Aby uzyskać więcej informacji na temat wyrażenia ref warunkowego, zobacz Uwaga dotycząca oferty funkcji.For more information about the conditional ref expression, see the feature proposal note.

Zobacz takżeSee also