Поделиться через


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

Обновлен: Июль 2008

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

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

    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 a 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 a 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.

Оператор fixed.

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

Оператор lock.

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

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

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

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

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

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

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

// Recommended style. Embedded statement in a 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(b == 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#:

  • 1.5 Операторы

  • 8 Операторы

См. также

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

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

Журнал изменений

Дата

Журнал

Причина

Июль 2008

Добавлены новые примеры кода и изменен текст.

Улучшение информации.