ВыраженияExpressions

Выражения создаются из операндов и операторов.Expressions are constructed from operands and operators. Операторы в выражении указывают, какие действия нужно применить к операндам.The operators of an expression indicate which operations to apply to the operands. Примеры операторов: +, -, *, / и new.Examples of operators include +, -, *, /, and new. Операндами могут являться литералы, поля, локальные переменные, выражения и т. п.Examples of operands include literals, fields, local variables, and expressions.

Если выражение содержит несколько операторов, порядок вычисления этих операторов определяется их приоритетом.When an expression contains multiple operators, the precedence of the operators controls the order in which the individual operators are evaluated. Например, выражение x + y * z вычисляется как x + (y * z), поскольку оператор * имеет более высокий приоритет, чем оператор +.For example, the expression x + y * z is evaluated as x + (y * z) because the * operator has higher precedence than the + operator.

Если операнд располагается между двумя операторами с одинаковым приоритетом, порядок их выполнения определяется ассоциативностью операторов.When an operand occurs between two operators with the same precedence, the associativity of the operators controls the order in which the operations are performed:

  • Все бинарные операторы, за исключением операторов присваивания, имеют левую ассоциативность,то есть эти операции выполняются слева направо.Except for the assignment operators, all binary operators are left-associative, meaning that operations are performed from left to right. Например, выражение x + y + z вычисляется как (x + y) + z.For example, x + y + z is evaluated as (x + y) + z.
  • Операторы присваивания и условный оператор (?:) являются правоассоциативными то есть эти операции выполняются справа налево.The assignment operators and the conditional operator (?:) are right-associative, meaning that operations are performed from right to left. Например, выражение x = y = z вычисляется как x = (y = z).For example, x = y = z is evaluated as x = (y = z).

Приоритет и ассоциативность операторов можно изменять, используя скобки.Precedence and associativity can be controlled using parentheses. Например, в выражении x + y * z сначала y умножается на z, а результат прибавляется к x, а в выражении (x + y) * z сначала суммируются x и y, а результат умножается на z.For example, x + y * z first multiplies y by z and then adds the result to x, but (x + y) * z first adds x and y and then multiplies the result by z.

Большинство операторов допускают перегрузку.Most operators can be overloaded. Перегрузка операторов позволяет создать пользовательскую реализацию оператора для таких операций, в которых один или оба операнда имеют определяемый пользователем тип класса или структуры.Operator overloading permits user-defined operator implementations to be specified for operations where one or both of the operands are of a user-defined class or struct type.

В следующей таблице перечислены операторы C# и категории операторов в порядке приоритета (от самого высокого до самого низкого).The following summarizes C#’s operators, listing the operator categories in order of precedence from highest to lowest. Операторы в одной категории имеют одинаковый приоритет.Operators in the same category have equal precedence. В каждой категории приведен список выражений для этой категории с описанием каждого типа выражений.Under each category is a list of expressions in that category along with the description of that expression type.

  • ПервичныйPrimary
    • x.m: Доступ к членамx.m: Member access
    • x(...): Вызов метода и делегатаx(...): Method and delegate invocation
    • x[...]: Доступ к массиву и индексаторуx[...]: Array and indexer access
    • x++: Постфиксный инкрементx++: Post-increment
    • x--: Постфиксный декрементx--: Post-decrement
    • new T(...): Создание объекта и делегатаnew T(...): Object and delegate creation
    • new T(...){...}: создание объекта с инициализаторомnew T(...){...}: Object creation with initializer
    • new {...}: анонимный инициализатор объектаnew {...}: Anonymous object initializer
    • new T[...]: создание массиваnew T[...]: Array creation
    • typeof(T): получение объекта Type для Ttypeof(T): Obtain Type object for T
    • checked(x): Вычисление выражения в проверенном контекстеchecked(x): Evaluate expression in checked context
    • unchecked(x): Вычисление выражения в непроверенном контекстеunchecked(x): Evaluate expression in unchecked context
    • default(T): получение значения по умолчанию для типа Tdefault(T): Obtain default value of type T
    • delegate {...}: Анонимная функция (анонимный метод)delegate {...}: Anonymous function (anonymous method)
  • УнарныйUnary
    • +x: идентификации+x: Identity
    • -x: Отрицание-x: Negation
    • !x: Логическое отрицание!x: Logical negation
    • ~x: Поразрядное отрицание~x: Bitwise negation
    • ++x: Префиксный инкремент++x: Pre-increment
    • --x: Префиксный декремент--x: Pre-decrement
    • (T)x: явное преобразование x в тип T(T)x: Explicitly convert x to type T
    • await x: асинхронное ожидание завершения xawait x: Asynchronously wait for x to complete
  • МультипликативныйMultiplicative
    • x * y: Умножениеx * y: Multiplication
    • x / y: Делениеx / y: Division
    • x % y: Остатокx % y: Remainder
  • АддитивныйAdditive
    • x + y: Сложение, объединение строк, объединение делегатовx + y: Addition, string concatenation, delegate combination
    • x – y: Вычитание, удаление делегатовx – y: Subtraction, delegate removal
  • СдвигShift
    • x << y: Сдвиг влевоx << y: Shift left
    • x >> y: Сдвиг вправоx >> y: Shift right
  • Тестирования типа и относительныеRelational and type testing
    • x < y: Меньшеx < y: Less than
    • x > y: Большеx > y: Greater than
    • x <= y: Меньше или равноx <= y: Less than or equal
    • x >= y: Больше или равноx >= y: Greater than or equal
    • x is T: возвращает true, если x является T, или false в противном случаеx is T: Return true if x is a T, false otherwise
    • x as T: возвращает x с типом T или null, если x не является Tx as T: Return x typed as T, or null if x is not a T
  • РавенствоEquality
    • x == y: Равноx == y: Equal
    • x != y: Не равноx != y: Not equal
  • Логическое ИLogical AND
    • x & y: поразрядное логическое И для операндов целочисленного типа, логическое И для операндов логического типаx & y: Integer bitwise AND, boolean logical AND
  • Логическое исключающее ИЛИLogical XOR
    • x ^ y: Поразрядное исключающее ИЛИ для операндов целочисленного типа, логическое исключающее ИЛИ для операндов логического типаx ^ y: Integer bitwise XOR, boolean logical XOR
  • Логическое ИЛИLogical OR
    • x | y: Поразрядное ИЛИ для операндов целочисленного типа, логическое ИЛИ для операндов логического типаx | y: Integer bitwise OR, boolean logical OR
  • Условное ИConditional AND
    • x && y: возвращает y, только если x не равно falsex && y: Evaluates y only if x is not false
  • Условное ИЛИConditional OR
    • x || y: возвращает y, только если x не равно truex || y: Evaluates y only if x is not true
  • Объединение со значением NULLNull coalescing
    • x ?? y: возвращает значение y, если x имеет значение NULL, или x в противном случаеx ?? y: Evaluates to y if x is null, to x otherwise
  • УсловиеConditional
    • x ? y : z: возвращает y, если x имеет значение true, или z, если x имеет значение falsex ? y : z: Evaluates y if x is true, z if x is false
  • Присваивание или анонимная функцияAssignment or anonymous function
    • x = y: Назначениеx = y: Assignment
    • x op= y: составное присваивание, поддерживаются операторыx op= y: Compound assignment; supported operators are
      • *= /= %= += -= <<= >>= &= ^= |=*= /= %= += -= <<= >>= &= ^= |=
    • (T x) => y: Анонимная функция (лямбда-выражение)(T x) => y: Anonymous function (lambda expression)