Си шарп знак вопроса

Тернарный оператор

Тернарный оператор (?) относится к числу самых примечательных в C#.
Он представляет собой условный оператор и часто используется вместо определенных видов конструкций if-then-else.

Оператор унаследован из языка С++ без изменений, как очень эффективная конструкция. Если в коде программы (кроме комментариев) встречается символ «?», то это может быть только тернарный оператор, или синтаксическая ошибка.

Ниже приведена общая форма этого оператора:
Выражение1 ? Выражение2 : ВыражениеЗ;
Здесь Выражение1 должно относиться к типу bool, а Выражение2 и ВыражениеЗ — к одному и тому же типу.
Обратите внимание на применение двоеточия и его местоположение в операторе ?.
Значение выражения ? определяется следующим образом.
Сначала вычисляется Выражение1.
Если оно истинно, то вычисляется Выражение2, а полученный результат определяет значение всего выражения ? в целом.
Если же Выражение1 оказывается ложным, то вычисляется ВыражениеЗ, и его значение становится общим для всего выражения ?:

 int b, c; c = -4; b = c >=0 ? c : c*c; // b = 16 

Присваивать переменной результат выполнения оператора ? совсем не обязательно. Например, значение, которое дает оператор ?, можно использовать в качестве аргумента при вызове метода.
А если все выражения в операторе ? относятся к типу bool, то такой оператор может заменить собой условное выражение в цикле или операторе if.

Пример использования тернарного оператора:

using System; namespace ConsoleApplication1   class Program   static void Main(string[] args)   int result; // Реализуем функцию модуля числа for (int i = 4; i >= -5; i--)   result = i >= 0 ? i : -i; Console.Write("\t", result); > Console.WriteLine("\n"); // Выбор четных чисел for (int i = 0; i < 10; i++)   if (i % 2 == 0 ? true : false) Console.Write("\t", i); > Console.ReadLine(); > > > 

214

Результат:

Перейдем к рассмотрению более традиционных условных операторов в языке C#.

NEW: Наш Чат, в котором вы можете обсудить любые вопросы, идеи, поделиться опытом или связаться с администраторами.

Источник

?: operator — the ternary conditional operator

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 , as the following example shows:

string GetWeatherDisplay(double tempInCelsius) => tempInCelsius < 20.0 ? "Cold." : "Perfect!"; Console.WriteLine(GetWeatherDisplay(15)); // output: Cold. Console.WriteLine(GetWeatherDisplay(27)); // output: Perfect! 

As the preceding example shows, the syntax for the conditional operator is as follows:

condition ? consequent : alternative 

The condition expression must evaluate to true or false . If condition evaluates to true , the consequent expression is evaluated, and its result becomes the result of the operation. If condition evaluates to false , the alternative expression is evaluated, and its result becomes the result of the operation. Only consequent or alternative is evaluated.

Beginning with C# 9.0, conditional expressions are target-typed. That is, if a target type of a conditional expression is known, the types of consequent and alternative must be implicitly convertible to the target type, as the following example shows:

var rand = new Random(); var condition = rand.NextDouble() > 0.5; int? x = condition ? 12 : null; IEnumerable xs = x is null ? new List() < 0, 1 >: new int[] < 2, 3 >; 

If a target type of a conditional expression is unknown (for example, when you use the var keyword) or the type of consequent and alternative must be the same or there must be an implicit conversion from one type to the other:

var rand = new Random(); var condition = rand.NextDouble() > 0.5; var x = condition ? 12 : (int?)null; 

The conditional operator is right-associative, that is, an expression of the form

You can use the following mnemonic device to remember how the conditional operator is evaluated:

is this condition true ? yes : no 

Conditional ref expression

A reference variable can be assigned conditionally with a conditional ref expression. You can also use a conditional ref expression as a reference return value or as a ref method argument.

The syntax for a conditional ref expression is as follows:

condition ? ref consequent : ref alternative 

Like the original conditional operator, a conditional ref expression evaluates only one of the two expressions: either consequent or alternative .

In a conditional ref expression, the type of consequent and alternative must be the same. Conditional ref expressions aren't target-typed.

The following example demonstrates the usage of a 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 

Conditional operator and an if statement

Use of the conditional operator instead of an if statement might result in more concise code in cases when you need conditionally to compute a value. 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"; 

Operator overloadability

A user-defined type can't overload the conditional operator.

C# language specification

For more information, see the Conditional operator section of the C# language specification.

Specifications for newer features are:

See also

Источник

?: оператор — тернарный условный оператор

Условный оператор ?: , также называемый тернарным, вычисляет логическое выражение и в зависимости от полученного значения 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 .

Начиная с C# 9.0 условные выражения имеют целевой тип. Это значит, что если известен целевой тип условного выражения, типы consequent и alternative должны быть неявно преобразованы в целевой тип, как показано в следующем примере:

var rand = new Random(); var condition = rand.NextDouble() > 0.5; int? x = condition ? 12 : null; IEnumerable xs = x is null ? new List() < 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; 

Условный оператор имеет правую ассоциативность, то есть выражение формы.

Вы можете использовать следующий мнемонический прием, чтобы запомнить, как оценивается условный оператор:

is this condition true ? yes : no 

Условное выражение REF

Ссылочной переменной можно назначить условно с помощью условного выражения ref. Кроме того, условное выражение REF можно использовать как возвращаемое ссылочное значение или как аргумент метода ref .

Для условного выражения REF используется следующий синтаксис:

condition ? ref consequent : ref alternative 

Подобно исходному условному оператору, условное выражение REF вычисляет только одно из двух выражений: consequent или alternative .

В выражении условной ссылки тип consequent и alternative должен быть одинаковым. Выражения условной ссылки не являются целевыми.

В следующем примере иллюстрируется использование условного выражения REF:

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 

Условный оператор и оператор 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#.
Он представляет собой условный оператор и часто используется вместо определенных видов конструкций if-then-else.

Оператор унаследован из языка С++ без изменений, как очень эффективная конструкция. Если в коде программы (кроме комментариев) встречается символ «?», то это может быть только тернарный оператор, или синтаксическая ошибка.

Ниже приведена общая форма этого оператора:
Выражение1 ? Выражение2 : ВыражениеЗ;
Здесь Выражение1 должно относиться к типу bool, а Выражение2 и ВыражениеЗ — к одному и тому же типу.
Обратите внимание на применение двоеточия и его местоположение в операторе ?.
Значение выражения ? определяется следующим образом.
Сначала вычисляется Выражение1.
Если оно истинно, то вычисляется Выражение2, а полученный результат определяет значение всего выражения ? в целом.
Если же Выражение1 оказывается ложным, то вычисляется ВыражениеЗ, и его значение становится общим для всего выражения ?:

 int b, c; c = -4; b = c >=0 ? c : c*c; // b = 16 

Присваивать переменной результат выполнения оператора ? совсем не обязательно. Например, значение, которое дает оператор ?, можно использовать в качестве аргумента при вызове метода.
А если все выражения в операторе ? относятся к типу bool, то такой оператор может заменить собой условное выражение в цикле или операторе if.

Пример использования тернарного оператора:

using System; namespace ConsoleApplication1   class Program   static void Main(string[] args)   int result; // Реализуем функцию модуля числа for (int i = 4; i >= -5; i--)   result = i >= 0 ? i : -i; Console.Write("\t", result); > Console.WriteLine("\n"); // Выбор четных чисел for (int i = 0; i < 10; i++)   if (i % 2 == 0 ? true : false) Console.Write("\t", i); > Console.ReadLine(); > > > 

214

Результат:

Перейдем к рассмотрению более традиционных условных операторов в языке C#.

NEW: Наш Чат, в котором вы можете обсудить любые вопросы, идеи, поделиться опытом или связаться с администраторами.

Источник

Читайте также:  Css как задать стиль классу
Оцените статью