Операторы (Руководство по программированию в C#)

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

Оператор может состоять из одной строки кода, которая заканчивается точкой с запятой, или из ряда однострочных операторов в блоке. Блок оператора заключен в скобки ({}) и может содержать вложенные блоки. В следующем коде показаны два примера однострочных операторов и блок многострочного оператора:

    static void Main()
    {
        // Declaration statement. 
        int counter;

        // Assignment statement.
        counter = 1;

        // Error! This is an expression, not an expression statement. 
        // counter + 1;  

        // Declaration statements with initializers are functionally 
        // equivalent to  declaration statement followed by assignment statement:          
        int[] radii = { 15, 32, 108, 74, 9 }; // Declare and initialize an array. 
        const double pi = 3.14159; // Declare and initialize  constant.           

        // foreach statement block that contains multiple statements. 
        foreach (int radius in radii)
        {
            // Declaration statement with initializer. 
            double circumference = pi * (2 * radius);

            // Expression statement (method invocation). A single-line 
            // statement can span multiple text lines because line breaks 
            // are treated as white space, which is ignored by the compiler.
            System.Console.WriteLine("Radius of circle #{0} is {1}. Circumference = {2:N2}",
                                    counter, radius, circumference);

            // Expression statement (postfix increment).
            counter++;

        } // End of foreach statement block
    } // End of Main method body.
} // End of SimpleStatements class. 
/*
   Output:
    Radius of circle #1 = 15. Circumference = 94.25
    Radius of circle #2 = 32. Circumference = 201.06
    Radius of circle #3 = 108. Circumference = 678.58
    Radius of circle #4 = 74. Circumference = 464.96
    Radius of circle #5 = 9. Circumference = 56.55
*/

Типы операторов

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

Категория

Ключевые слова / примечания C#

Операторы объявления

Оператор объявления представляет новую переменную или константу. Объявление переменной может при необходимости присвоить значение переменной. В объявлении константы необходимо назначение.

Операторы выражений

Операторы выражений, вычисляющие значение, должны сохранить его в переменной.

Операторы выбора

Операторы выбора позволяют ветвление на разные разделы кода, в зависимости от одного или нескольких заданных условий. Дополнительные сведения см. в следующих разделах:

if, else, switch, case

Операторы итерации

Операторы итерации позволяют просмотр коллекций как массивов или многократное выполнение того же набора операторов до выполнения заданного условия. Дополнительные сведения см. в следующих разделах:

do, for, foreach, in, while

Операторы перехода

Операторы перехода осуществляют передачу управления другому разделу кода. Дополнительные сведения см. в следующих разделах:

break, continue, default, goto, return, yield

Операторы обработки исключений

Операторы обработки исключений позволяют аккуратно восстановиться после исключительных условий, возникающих во время выполнения. Дополнительные сведения см. в следующих разделах:

throw, try-catch, try-finally, try-catch-finally

Операторы checked и unchecked

Операторы checked и unchecked позволяют указать, позволено ли числовым операциям вызывать переполнение, когда результат сохраняется в переменной, которая слишком мала для хранения результирующего значения. Дополнительные сведения см. в разделах checked и unchecked.

Оператор await.

Если пометить метод с модификатором async, можно использовать оператор подождите в методе. Если элемент управления достигает выражение await в методе async, передачи вызывающему приложению, а ход выполнения в методе приостанавливается до тех пор, пока подожданная задача не завершится. Если задача завершена, выполнение может возобновить в методе.

Для простого примера см. раздел "Async" Методы (Руководство по программированию на C#) методов. Дополнительные сведения см. в разделе Асинхронное программирование с использованием ключевых слов Async и Await (C# и Visual Basic).

Оператор yield return.

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

Дополнительные сведения см. в разделе Итераторы (C# и Visual Basic).

Оператор fixed.

Оператор fixed не позволяет сборщику мусора переносить перемещаемую переменную. Дополнительные сведения см. в разделе fixed.

Оператор lock.

Оператор lock позволяет ограничить одновременный доступ к блокам кода только до одного потока. Дополнительные сведения см. в разделе lock.

Помеченные операторы

Оператор можно пометить и затем использовать ключевое слово goto для перехода к помеченному оператору. (См. пример в следующей строке.)

Пустой оператор

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

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

В некоторых операторах, включая do, while, for и foreach, всегда есть внедренный оператор, следующий за ними. Этот внедренный оператор может быть либо одним оператором, либо несколькими операторами, заключенными в скобки ({}) в блоке оператора. Даже однострочные внедренные операторы могут быть заключены в скобки ({}), как показано в следующем примере:

// Recommended style. Embedded statement in  block. 
foreach (string s in System.IO.Directory.GetDirectories(
                        System.Environment.CurrentDirectory))
{
    System.Console.WriteLine(s);
}

// Not recommended. 
foreach (string s in System.IO.Directory.GetDirectories(
                        System.Environment.CurrentDirectory))
    System.Console.WriteLine(s);

Внедренный оператор, не заключенный в скобки ({}), не может быть оператором объявления или помеченным оператором. Это показано в следующем примере:

if(pointB == true)
    //Error CS1023: 
    int radius = 5; 

Чтобы устранить ошибку, поместите внедренный оператор в блок:

if (b == true)
{
    // OK:
    System.DateTime d = System.DateTime.Now;
    System.Console.WriteLine(d.ToLongDateString());
}

Вложенные блоки операторов

Блоки операторов могут быть вложенными, как показано в следующем коде:

foreach (string s in System.IO.Directory.GetDirectories(
    System.Environment.CurrentDirectory))
{
    if (s.StartsWith("CSharp"))
    {
        if (s.EndsWith("TempFolder"))
        {
            return s;
        }
    }

}
return "Not found.";

Недостижимые операторы

Если компилятор определяет, что поток управления ни при каких обстоятельствах не сможет достичь определенного оператора, то он выдаст предупреждение CS0162, как показано в следующем примере:

// An over-simplified example of unreachable code. 
const int val = 5;
if (val < 4)
{
    System.Console.WriteLine("I'll never write anything."); //CS0162
}

Связанные разделы

Спецификация языка C#

Дополнительные сведения см. в Спецификация языка C#. Спецификация языка является предписывающим источником информации о синтаксисе и использовании языка C#.

См. также

Основные понятия

Руководство по программированию на C#