?: – operátorC# (Referenční dokumentace)?: operator (C# reference)

Podmíněný operátor ?:, označovaný také jako Ternární podmíněný operátor, vyhodnotí logický výraz a vrátí výsledek jednoho ze dvou výrazů, v závislosti na tom, zda se logický výraz vyhodnotí jako true nebo 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. Počínaje C# 7,2, podmíněný výraz ref vrátí odkaz na výsledek jednoho ze dvou výrazů.Beginning with C# 7.2, the conditional ref expression returns the reference to the result of one of the two expressions.

Syntaxe podmíněného operátoru je následující:The syntax for the conditional operator is as follows:

condition ? consequent : alternative

Výraz condition musí být vyhodnocen jako true nebo false.The condition expression must evaluate to true or false. Je-li condition vyhodnocen jako true, je vyhodnocen výraz consequent a jeho výsledek se projeví v důsledku operace.If condition evaluates to true, the consequent expression is evaluated, and its result becomes the result of the operation. Je-li condition vyhodnocen jako false, je vyhodnocen výraz alternative a jeho výsledek se projeví v důsledku operace.If condition evaluates to false, the alternative expression is evaluated, and its result becomes the result of the operation. Vyhodnotí se jenom consequent nebo alternative.Only consequent or alternative is evaluated.

Typ consequent a alternative musí být stejný, nebo musí být implicitní převod z jednoho typu na druhý.The type of consequent and alternative must be the same, or there must be an implicit conversion from one type to the other.

Podmíněný operátor je asociativní zprava, to znamená výraz formuláře.The conditional operator is right-associative, that is, an expression of the form

a ? b : c ? d : e

je vyhodnocen jakois evaluated as

a ? b : (c ? d : e)

Tip

K zapamatování, jak podmíněný operátor je vyhodnoceno, můžete použít následující symbolické zařízení:You can use the following mnemonic device to remember how the conditional operator is evaluated:

is this condition true ? yes : no

Následující příklad ukazuje použití podmíněného operátoru: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

Podmíněný výraz refConditional ref expression

Počínaje C# 7,2 můžete použít výraz podmíněného odkazu k vrácení odkazu na výsledek jednoho ze dvou výrazů.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. Tento odkaz můžete přiřadit k místní proměnné ref nebo ref jen pro čtení nebo použít jako návratovou hodnotu odkazu nebo jako parametr 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.

Syntaxe pro podmíněný výraz ref je následující:The syntax for the conditional ref expression is as follows:

condition ? ref consequent : ref alternative

Podobně jako původní podmíněný operátor, podmíněný výraz ref vyhodnocuje pouze jeden ze dvou výrazů: buď consequent, nebo alternative.Like the original conditional operator, the conditional ref expression evaluates only one of the two expressions: either consequent or alternative.

V případě podmíněného výrazu ref musí být typ consequent a alternative stejný.In the case of the conditional ref expression, the type of consequent and alternative must be the same.

Následující příklad ukazuje použití podmíněného ref výrazu: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

Podmíněný operátor a příkaz if..elseConditional operator and an if..else statement

Použití podmíněného operátoru namísto příkazu if-else může mít za následek výstižnější kód v případech, kdy budete potřebovat podmíněně k výpočtu hodnoty.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. Následující příklad ukazuje dva způsoby, jak klasifikovat celé číslo jako záporné nebo nezáporné: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";

Přetížení operátoruOperator overloadability

Uživatelsky definovaný typ nemůže přetížit podmíněný operátor.A user-defined type cannot overload the conditional operator.

specifikace jazyka C#C# language specification

Další informace naleznete v části podmíněný operátor ve C# specifikaci jazyka.For more information, see the Conditional operator section of the C# language specification.

Další informace o podmíněném výrazu ref najdete v poznámce k návrhu funkcí.For more information about the conditional ref expression, see the feature proposal note.

Viz také:See also