Operadores de C# (referencia de C#)C# operators (C# reference)

C# proporciona una serie de operadores compatibles con los tipos integrados.C# provides a number of operators supported by the built-in types. Por ejemplo, los operadores aritméticos realizan operaciones aritméticas con operandos numéricos, y los operadores lógicos booleanos realizan operaciones lógicas con los operandos bool.For example, arithmetic operators perform arithmetic operations with numeric operands and Boolean logical operators perform logical operations with the bool operands. Algunos operadores se pueden sobrecargar.Certain operators can be overloaded. Con la sobrecarga de operadores, puede especificar el comportamiento del operador para los operandos de un tipo definido por el usuario.With operator overloading, you can specify the operator behavior for the operands of a user-defined type.

En una expresión, la prioridad y la asociatividad de los operadores determinan el orden en el que se realizan las operaciones.In an expression, operator precedence and associativity determine the order in which the operations are performed. Puede usar los paréntesis para cambiar el orden de evaluación impuesto por la prioridad y la asociatividad de operadores.You can use parentheses to change the order of evaluation imposed by operator precedence and associativity.

Prioridad de operadoresOperator precedence

En una expresión con varios operadores, los operadores con mayor prioridad se evalúan antes que los operadores con menor prioridad.In an expression with multiple operators, the operators with higher precedence are evaluated before the operators with lower precedence. En el ejemplo siguiente, la multiplicación se realiza primero porque tiene mayor prioridad que la suma: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 paréntesis para cambiar el orden de evaluación impuesto por la prioridad de los operadores:Use parentheses to change the order of evaluation imposed by operator precedence:

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

En la tabla siguiente se muestran los operadores de C# desde la precedencia más alta a la más baja.The following table lists the C# operators starting with the highest precedence to the lowest. Los operadores de cada fila comparten la prioridad.The operators within each row have the same precedence.

OperadoresOperators Categoría o nombreCategory 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 PrincipalPrimary
+x, -x, !x, ~x, ++x, --x, ^x, (T)x, await, &x, *x, true and false+x, -x, !x, ~x, ++x, --x, ^x, (T)x, await, &x, *x, true and false UnarioUnary
x..yx..y IntervaloRange
x * y, x / y, x % yx * y, x / y, x % y MultiplicativoMultiplicative
x + y, x – yx + y, x – y AditivoAdditive
x << y, x >> yx << y, x >> y ShiftShift
x < y, x > y, x <= y, x >= y, is, asx < y, x > y, x <= y, x >= y, is, as Comprobación de tipos y relacionalRelational and type-testing
x == y, x != yx == y, x != y IgualdadEquality
x & y Operador lógico booleano AND u operador lógico bit a bit ANDBoolean logical AND or bitwise logical AND
x ^ y Operador lógico booleano XOR u operador lógico bit a bit XORBoolean logical XOR or bitwise logical XOR
x | y Operador lógico booleano OR u operador lógico bit a bit ORBoolean logical OR or bitwise logical OR
x && yx && y AND condicionalConditional AND
x || yx || y OR condicionalConditional OR
x ?? yx ?? y Operador de uso combinado de nullNull-coalescing operator
c ? t : fc ? t : f Operador condicionalConditional 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, => Asignación y declaración lambdaAssignment and lambda declaration

Asociatividad de los operadoresOperator associativity

Cuando los operadores tienen la misma prioridad, su asociatividad determina el orden en el que se realizan las operaciones:When operators have the same precedence, associativity of the operators determines the order in which the operations are performed:

  • Los operadores asociativos a la izquierda se evalúan, por orden, de izquierda a derecha.Left-associative operators are evaluated in order from left to right. A excepción de los operadores de asignación y el operador de integración nula , todos los operadores binarios son asociativos a la izquierda.Except for the assignment operators and the null-coalescing operators, all binary operators are left-associative. Por ejemplo, a + b - c se evalúa como (a + b) - c.For example, a + b - c is evaluated as (a + b) - c.
  • Los operadores asociativos a la derecha se evalúan, por orden, de derecha a izquierda.Right-associative operators are evaluated in order from right to left. Los operadores de asignación, el operador de integración nula y el operador condicional ?: son asociativos a la derecha.The assignment operators, the null-coalescing operators, and the conditional operator ?: are right-associative. Por ejemplo, x = y = z se evalúa como x = (y = z).For example, x = y = z is evaluated as x = (y = z).

Use paréntesis, para cambiar el orden de evaluación impuesto por la asociatividad de los operadores: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

Evaluación de operandosOperand evaluation

Independientemente de la prioridad y la asociatividad de los operadores, los operandos de una expresión se evalúan de izquierda a derecha.Unrelated to operator precedence and associativity, operands in an expression are evaluated from left to right. En los siguientes ejemplos, se muestra el orden en el que se evalúan los operadores y los operandos:The following examples demonstrate the order in which operators and operands are evaluated:

ExpresiónExpression Orden de evaluaciónOrder 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, *

Normalmente, se evalúan todos los operandos de un operador.Typically, all operator operands are evaluated. Algunos operadores evalúan los operandos de forma condicional.Some operators evaluate operands conditionally. Esto significa que el valor del primer operando de este tipo de operador define si se deben evaluar otros operandos, o bien qué operandos deben evaluarse.That is, the value of the first operand of such an operator defines if (or which) other operands should be evaluated. Estos operadores son los operadores lógicos condicionales AND (&&) y OR (||), los operadores de integración nula ?? y ??=, los operadores condicionales nulos ?. y ?[], así como el operador condicional ?:.These operators are the conditional logical AND (&&) and OR (||) operators, the null-coalescing operators ?? and ??=, the null-conditional operators ?. and ?[], and the conditional operator ?:. Para obtener más información, consulte la descripción de cada operador.See the description of each operator for more details.

Especificación del lenguaje C#C# language specification

Para obtener más información, vea la sección sobre Operadores de la Especificación del lenguaje C#.For more information, see the Operators section of the C# language specification.

Vea tambiénSee also