Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Условный оператор ?:, также называемый тернарным, вычисляет логическое выражение и в зависимости от полученного значения true или false возвращает результат одного из двух соответствующих выражений, как показано в следующем примере.
string GetWeatherDisplay(double tempInCelsius) => tempInCelsius < 20.0 ? "Cold." : "Perfect!";
Console.WriteLine(GetWeatherDisplay(15)); // output: Cold.
Console.WriteLine(GetWeatherDisplay(27)); // output: Perfect!
Как показано в предыдущем примере, синтаксис условного оператора выглядит следующим образом.
condition ? consequent : alternative
Выражение condition должно принимать значение true или false. Если condition принимает значение true, вычисляется выражение consequent, а результат становится результатом операции. Если condition принимает значение false, вычисляется выражение alternative, а результат становится результатом операции. Вычисляется только выражение consequent или alternative. Условные выражения являются целевыми типами. Это значит, что если известен целевой тип условного выражения, типы consequent и alternative должны быть неявно преобразованы в целевой тип, как показано в следующем примере:
var rand = new Random();
var condition = rand.NextDouble() > 0.5;
int? x = condition ? 12 : null;
IEnumerable<int> xs = x is null ? new List<int>() { 0, 1 } : new int[] { 2, 3 };
Если целевой тип условного выражения неизвестен (например, при использовании var ключевого слова) или тип consequent и alternative должен быть одинаковым, или должно быть неявное преобразование одного типа в другой:
var rand = new Random();
var condition = rand.NextDouble() > 0.5;
var x = condition ? 12 : (int?)null;
Условный оператор имеет правую ассоциативность, то есть выражение формы.
a ? b : c ? d : e
вычисляется как
a ? b : (c ? d : e)
Совет
Вы можете использовать следующий мнемонический прием, чтобы запомнить, как оценивается условный оператор:
is this condition true ? yes : no
Условное выражение REF
Условное выражение ссылочного выражения условно возвращает ссылку на переменную, как показано в следующем примере:
int[] smallArray = {1, 2, 3, 4, 5};
int[] largeArray = {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
Вы можете ref назначить результат условного ссылочного выражения, использовать его в качестве возвращаемогоссылки или передать его в качестве параметра метода , refoutили inв качестве ref readonlyпараметра метода. Вы также можете назначить результат условного выражения ссылок, как показано в предыдущем примере.
Для условного выражения REF используется следующий синтаксис:
condition ? ref consequent : ref alternative
Как и условный оператор, выражение условного ссылок оценивает только одно из двух выражений: либо consequentalternative.
В выражении условного consequent ссылок тип и alternative должен быть одинаковым. Условные выражения ссылок не являются целевыми типами.
Условный оператор и оператор if
Если использовать условный оператор вместо оператора if, может получиться более лаконичный код в случаях, когда необходимо условно вычислить значение. В следующем примере иллюстрируются два вида классификации целого числа как положительного или отрицательного:
int input = new Random().Next(-5, 5);
string classify;
if (input >= 0)
{
classify = "nonnegative";
}
else
{
classify = "negative";
}
classify = (input >= 0) ? "nonnegative" : "negative";
Возможность перегрузки оператора
Определяемый пользователем тип не может перегружать условный оператор.
Спецификация языка C#
Дополнительные сведения см. в разделе Условный оператор статьи Предварительная спецификация C# 6.0.
Спецификации новых функций: