Операторы C# (справочник по C#)C# operators (C# reference)

C# предоставляет ряд операторов, поддерживаемых встроенными типами.C# provides a number of operators supported by the built-in types. Например арифметические операторы выполняют арифметические операции с числовыми операндами, а логические операторы выполняют логические операции с операндами bool.For example, arithmetic operators perform arithmetic operations with numeric operands and Boolean logical operators perform logical operations with the bool operands. Большинство операторов могут быть перегружены.Certain operators can be overloaded. С помощью перегрузки операторов можно указать поведение оператора для операндов определяемого пользователем типа.With operator overloading, you can specify the operator behavior for the operands of a user-defined type.

В выражении приоритет и ассоциативность операторов определяют порядок выполнения операций.In an expression, operator precedence and associativity determine the order in which the operations are performed. Порядок вычисления, определяемый приоритетом и ассоциативностью операторов, можно изменить с помощью скобок.You can use parentheses to change the order of evaluation imposed by operator precedence and associativity.

Приоритет операторовOperator precedence

В выражении с несколькими операторами операторы с более высоким приоритетом оцениваются до операторов с более низким приоритетом.In an expression with multiple operators, the operators with higher precedence are evaluated before the operators with lower precedence. В следующем примере умножение выполняется сначала, так как оно имеет более высокий приоритет, чем сложение:In the following example, the multiplication is performed first because it has higher precedence than addition:

var a = 2 + 2 * 2;
Console.WriteLine(a); //  output: 6

Используйте скобки, чтобы изменить порядок вычисления, накладываемый приоритетом операторов:Use parentheses to change the order of evaluation imposed by operator precedence:

var a = (2 + 2) * 2;
Console.WriteLine(a); //  output: 8

В следующей таблице перечислены операторы C# в порядке убывания приоритета.The following table lists the C# operators starting with the highest precedence to the lowest. Операторы в каждой строке имеют одинаковый приоритет.The operators within each row have the same precedence.

ОператорыOperators Категория или имяCategory or name
x.y, x?.y, x?[y], f(x), a[i], x++, x--, new, typeof, checked, unchecked, default, nameof, delegate, sizeof, stackalloc, x->yx.y, x?.y, x?[y], f(x), a[i], x++, x--, new, typeof, checked, unchecked, default, nameof, delegate, sizeof, stackalloc, x->y ПервичныйPrimary
+x, -x, !x, ~x, ++x, --x, ^x, (T)x, await, &x, *x, true и false+x, -x, !x, ~x, ++x, --x, ^x, (T)x, await, &x, *x, true and false УнарныйUnary
x..yx..y ДиапазонRange
x * y, x / y, x % yx * y, x / y, x % y МультипликативныйMultiplicative
x + y, x – yx + y, x – y АддитивныйAdditive
x << y, x >> yx << y, x >> y СдвигShift
x < y, x > y, x <= y, x >= y, is, asx < y, x > y, x <= y, x >= y, is, as Тестирование типов и относительныйRelational and type-testing
x == y, x != yx == y, x != y РавенствоEquality
x & y Логическое И или побитовое логическое ИBoolean logical AND or bitwise logical AND
x ^ y Логическое исключающее ИЛИ или побитовое логическое исключающее ИЛИBoolean logical XOR or bitwise logical XOR
x | y Логическое ИЛИ или побитовое логическое ИЛИBoolean logical OR or bitwise logical OR
x && yx && y Условное ИConditional AND
x || yx || y Условное ИЛИConditional OR
x ?? yx ?? y Оператор объединения с NULLNull-coalescing operator
c ? t : fc ? t : f Условный операторConditional operator
x = y, x += y, x -= y, x *= y, x /= y, x %= y, x &= y, x |= y, x ^= y, x <<= y, x >>= y, x ??= y, =>x = y, x += y, x -= y, x *= y, x /= y, x %= y, x &= y, x |= y, x ^= y, x <<= y, x >>= y, x ??= y, => Назначение и объявление лямбда-выраженийAssignment and lambda declaration

Ассоциативность операторовOperator associativity

Если операторы имеют одинаковый приоритет, порядок их выполнения определяется ассоциативностью операторов:When operators have the same precedence, associativity of the operators determines the order in which the operations are performed:

  • Операторы с левой ассоциативностью вычисляются слева направо.Left-associative operators are evaluated in order from left to right. За исключением операторов присваивания и оператора объединения со значением NULL, все бинарные операторы имеют левую ассоциативность.Except for the assignment operators and the null-coalescing operators, all binary operators are left-associative. Например, выражение a + b - c вычисляется как (a + b) - c.For example, a + b - c is evaluated as (a + b) - c.
  • Операторы с правой ассоциативностью вычисляются справа налево.Right-associative operators are evaluated in order from right to left. Операторы присваивания, оператор объединения со значением NULL и условный оператор ?: имеют правую ассоциативность.The assignment operators, the null-coalescing operators, and the conditional operator ?: are right-associative. Например, выражение x = y = z вычисляется как x = (y = z).For example, x = y = z is evaluated as x = (y = z).

Используйте скобки, чтобы изменить порядок вычисления, накладываемый ассоциативностью операторов:Use parentheses to change the order of evaluation imposed by operator associativity:

int a = 13 / 5 / 2;
int b = 13 / (5 / 2);
Console.WriteLine($"a = {a}, b = {b}");  // output: a = 1, b = 6

Вычисление операндаOperand evaluation

Не связанные с приоритетом и ассоциативностью операторов операнды в выражении вычисляются слева направо.Unrelated to operator precedence and associativity, operands in an expression are evaluated from left to right. В следующих примерах иллюстрируется порядок вычисления операторов и операндов:The following examples demonstrate the order in which operators and operands are evaluated:

ВыражениеExpression Порядок вычисленийOrder of evaluation
a + b a, b, +a, b, +
a + b * c a, b, c, *, +a, b, c, *, +
a / b + c * d a, b, /, c, d, *, +a, b, /, c, d, *, +
a / (b + c) * d a, b, c, +, /, d, *a, b, c, +, /, d, *

Как правило, оцениваются все операнды операторов.Typically, all operator operands are evaluated. Однако некоторые операторы оценивают операнды условно.However, some operators evaluate operands conditionally. То есть значение крайнего левого операнда такого оператора определяет, следует ли оценивать другие операнды.That is, the value of the leftmost operand of such an operator defines if (or which) other operands should be evaluated. Эти операторы являются условными логическими операторами И (&&) и ИЛИ (||) , операторами объединения со значением NULL?? и ??=, условными операторами со значением NULL ?. и ?[] и условным оператором ?:.These operators are the conditional logical AND (&&) and OR (||) operators, the null-coalescing operators ?? and ??=, the null-conditional operators ?. and ?[], and the conditional operator ?:. Дополнительные сведения см. в описании каждого оператора.For more information, see the description of each operator.

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

Дополнительные сведения см. в разделе Операторы статьи Спецификация языка C#.For more information, see the Operators section of the C# language specification.

См. такжеSee also