C#. Тернарный оператор ?:. Примеры использования

Тернарный оператор ?:. Примеры использования


Содержание


1. Назначение оператора ?:. Общая форма

Для реализации выполнения действий в зависимости от условия используется оператор ?:. Это единственный тернарный оператор в языке C#. Для своего выполнения он требует трех операндов.

Общая форма оператора ?:

Условие ? Выражение1 : Выражение2

где

  • Условие – условное выражение, которое может принимать одно из двух значений: true или false;
  • Выражение1 – некоторое выражение, которое нужно выполнить в случае, если значение Условие = true;
  • Выражение2 – выражение, которое нужно выполнить если Условие не выполняется (Условие = false).

 

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

Пример 1. Определить максимальное значение между двумя числами. Текст приложения типа Console Application следующий.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp8
{
  class Program
  {
    static void Main(string[] args)
    {
      double x, y;
      double max;

      // 1. Ввод данных
      Console.Write("x = ");
      x = Convert.ToDouble(Console.ReadLine());
      Console.Write("y = ");
      y = Convert.ToDouble(Console.ReadLine());

      // 2. Определение максимального значения
      //    с помощью тернарного оператора ?:
      max = x > y ? x : y;

      // 3. Вывод результата
      Console.WriteLine("Maximum = {0:f4}", max);
      Console.ReadKey();
    }
  }
}

Пример 2. Даны радиус окружности и сторона квадрата. Вычислить площадь каждой фигуры и вывести значение максимальной площади.

Решение задачи для приложения созданного по шаблону Console Application:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp8
{
  class Program
  {
    static void Main(string[] args)
    {
      double radius, side; // радиус окружности и длина стороны квадрата
      double sCircle, sRect; // площадь окружности и квадрата
      double maxSquare;

      // 1. Ввод данных
      Console.Write("Input radius of a circle: ");
      radius = Convert.ToDouble(Console.ReadLine());
      Console.Write("Input side of a rectangle: ");
      side = Convert.ToDouble(Console.ReadLine());

      // 2. Вычислить площадь окружности и квадрата
      sCircle = Math.PI * radius * radius;
      sRect = side * side;

      // 3. Вычислить максимальное значение из двух площадей
      //   с помощью тернарного оператора ?:
      maxSquare = sCircle > sRect ? sCircle : sRect;

      // 3. Вывод результата
      Console.WriteLine("Square of a circle = {0:f3}", sCircle);
      Console.WriteLine("Square of the rectangle = {0:f3}", sRect);
      Console.WriteLine("Maximum = {0:f3}", maxSquare);
      Console.ReadKey();
    }
  }
}

Результат работы программы

Input radius of a circle: 2.5
Input side of a rectangle: 3.8
Square of a circle = 19.635
Square of the rectangle = 14.440
Maximum = 19.635

 

3. Может ли оператор ?: быть вложенным?

Да. Оператор ?: может иметь произвольное количество вложений.

Пример. С помощью вложенного оператора ?: вычисляется максимальное значение из трех чисел a, b, c. Числа вводятся с клавиатуры. Приложение типа Console Application.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp8
{
  class Program
  {
    static void Main(string[] args)
    {
      int a, b, c;
      int max;

      // 1. Ввод значений a, b, c
      Console.Write("a = ");
      a = Convert.ToInt32(Console.ReadLine());
      Console.Write("b = ");
      b = Convert.ToInt32(Console.ReadLine());
      Console.Write("c = ");
      c = Convert.ToInt32(Console.ReadLine());

      // 2. Вычисление максимального значения из трех чисел
      max = a > b ? a > c ? a : c : b > c ? b : c;

      // 3. Вывод результата
      Console.WriteLine("Maximum = {0}", max);
      Console.ReadKey();
    }
  }
}

Результат выполнения программы

a = 5
b = 3
c = 8
Maximum = 8

 


Связанные темы