Поиск…


If-Else Statement

Для программирования в целом часто требуется decision или branch в коде для учета того, как код работает под разными входами или условиями. В языке программирования C # (и большинстве языков программирования для этого) самым простым и иногда наиболее полезным способом создания ветки в вашей программе является оператор If-Else .

Предположим, что у нас есть метод (aka a function), который принимает параметр int, который будет составлять оценку до 100, и метод будет распечатывать сообщение о том, проходим ли мы или проваливаем.

static void PrintPassOrFail(int score)
{
    if (score >= 50) // If score is greater or equal to 50
    {
        Console.WriteLine("Pass!");
    }
    else // If score is not greater or equal to 50
    {
        Console.WriteLine("Fail!");
    }
}

При просмотре этого метода вы можете заметить эту строку кода ( score >= 50 ) внутри оператора If . Это можно рассматривать как boolean условие, где, если условие оценивается равным true , тогда выполняется код, находящийся между if { } .

Например, если этот метод был вызван следующим образом: PrintPassOrFail(60); , результатом этого метода будет сообщение Console Print say Pass! поскольку значение параметра 60 больше или равно 50.

Однако, если метод был вызван как: PrintPassOrFail(30); , выход метода будет распечатываться, говоря Fail! , Это связано с тем, что значение 30 не больше или равно 50, таким образом, код между else { } выполняется вместо оператора If .

В этом примере мы сказали, что оценка должна увеличиться до 100, что не учитывается вообще. Чтобы учесть, что счет не прошел мимо 100 или, возможно, опустился ниже 0, см. Пример If-Else If-Else .

If-Else If-Else Statement

Следуя примеру If-Else Statement , пришло время ввести инструкцию Else If . Операция Else If следует непосредственно после оператора If в структуре If-Else If-Else , но по сути имеет аналогичный синтаксис, как оператор If . Он используется для добавления большего количества ветвей в код, чем простой оператор If-Else .

В примере из If-Else Statement в примере указано, что оценка достигает 100; однако никогда не было никаких проверок против этого. Чтобы исправить это, измените метод из инструкции If-Else, чтобы выглядеть так:

static void PrintPassOrFail(int score)
{
    if (score > 100) // If score is greater than 100
    {
        Console.WriteLine("Error: score is greater than 100!");
    }
    else if (score < 0) // Else If score is less than 0
    {
        Console.WriteLine("Error: score is less than 0!");
    }
    else if (score >= 50) // Else if score is greater or equal to 50
    {
        Console.WriteLine("Pass!");
    }
    else // If none above, then score must be between 0 and 49
    {
        Console.WriteLine("Fail!");
    }
}

Все эти утверждения будут выполняться по порядку сверху до конца до тех пор, пока не будет выполнено условие. В этом новом обновлении метода мы добавили две новые ветки, которые теперь можно разместить для оценки, выходящего за пределы .

Например, если мы теперь вызвали метод в нашем коде как PrintPassOFail(110); , результатом будет сообщение «Консольная печать». Ошибка: оценка больше 100! ; и если мы назвали метод в нашем коде, например PrintPassOrFail(-20); , на выходе будет сказано Ошибка: оценка меньше 0! ,

Вывод операторов

Оператор switch позволяет проверять переменную для равенства по отношению к списку значений. Каждое значение называется случаем, а переменная, включенная, проверяется для каждого случая коммутатора.

Оператор switch часто более кратким и понятным, чем if...else if... else.. statement при тестировании нескольких возможных значений для одной переменной.

Синтаксис следующий:

switch(expression) {
   case constant-expression:
      statement(s);
      break;
   case constant-expression:
      statement(s);
      break;
  
   // you can have any number of case statements
   default : // Optional
      statement(s);
      break;
}

есть отдельные вещи, которые необходимо учитывать при использовании оператора switch

  • Выражение, используемое в операторе switch, должно иметь интегральный или нумерованный тип или быть типом класса, в котором класс имеет одну функцию преобразования для интегрального или перечисляемого типа.
  • Вы можете иметь любое количество операторов case в коммутаторе. За каждым случаем следует сравнимое значение и двоеточие. Значения для сравнения должны быть уникальными в каждом операторе switch.
  • Оператор switch может иметь необязательный случай по умолчанию. Случай по умолчанию может использоваться для выполнения задачи, когда ни один из случаев не является истинным.
  • Каждый случай должен заканчиваться оператором break если он не является пустой инструкцией. В этом случае исполнение будет продолжаться в случае ниже. Оператор break также может быть опущен, если используется goto case return , throw или goto case .

Пример может быть задан с оценками

char grade = 'B';

switch (grade)
{
    case 'A':
        Console.WriteLine("Excellent!");
        break;
    case 'B':
    case 'C':
        Console.WriteLine("Well done");
        break;
    case 'D':
        Console.WriteLine("You passed");
        break;
    case 'F':
        Console.WriteLine("Better try again");
        break;
    default:
        Console.WriteLine("Invalid grade");
        break;
}

Если условия оператора являются стандартными булевыми выражениями и значениями

Следующее утверждение

if (conditionA && conditionB && conditionC) //...

точно эквивалентен

bool conditions = conditionA && conditionB && conditionC;
if (conditions) // ...

другими словами, условия внутри оператора «if» просто образуют обычное булево выражение.

Общей ошибкой при написании условных утверждений является явное сравнение с true и false :

if (conditionA == true && conditionB == false && conditionC == true) // ...

Это можно переписать как

if (conditionA && !conditionB && conditionC)


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow