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

C# proporciona una serie de operadores predefinidos compatibles con los tipos integrados.C# provides a number of predefined operators supported by the built-in types. Por ejemplo, los operadores aritméticos realizan operaciones aritméticas con operandos de tipos numéricos integrados, y los operadores lógicos booleanos realizan operaciones lógicas con los operandos bool.For example, arithmetic operators perform arithmetic operations with operands of built-in numeric types and Boolean logical operators perform logical operations with the bool operands.

Un tipo definido por el usuario puede sobrecargar determinados operadores para definir el comportamiento correspondiente para los operandos de ese tipo.A user-defined type can overload certain operators to define the corresponding behavior for the operands of that type. Para obtener más información, vea el artículo sobre la palabra clave operator.For more information, see the operator keyword article.

En las secciones siguientes se enumeran los operadores de C# desde la precedencia más alta a la más baja.The following sections list the C# operators starting with the highest precedence to the lowest. Los operadores de cada sección comparten el mismo nivel de precedencia.The operators within each section share the same precedence level.

Operadores principalesPrimary operators

Estos son los operadores de precedencia más alta.These are the highest precedence operators.

x.y: acceso a miembros.x.y – member access.

x?.y: acceso a miembros condicionales nulos.x?.y – null conditional member access. Devuelve null si el operando izquierdo se evalúa como null.Returns null if the left-hand operand evaluates to null.

x?[y]: elemento de matriz condicional NULL o acceso al indizador de tipos.x?[y] - null conditional array element or type indexer access. Devuelve null si el operando izquierdo se evalúa como null.Returns null if the left-hand operand evaluates to null.

f(x): llamada de método o invocación de delegado.f(x) – method call or delegate invocation.

a[x]: elemento de matriz o acceso al indizador de tipos.a[x] – array element or type indexer access.

x++: incremento de postfijo.x++ – postfix increment. Devuelve el valor de x y, a continuación, actualiza la ubicación de almacenamiento con el valor de x que es uno mayor (normalmente agrega el entero 1).Returns the value of x and then updates the storage location with the value of x that is one greater (typically adds the integer 1).

x--: decremento de postfijo.x-- – postfix decrement. Devuelve el valor de x; a continuación, actualiza la ubicación de almacenamiento con el valor de x que es uno menos (normalmente resta el entero 1).Returns the value of x and then updates the storage location with the value of x that is one less (typically subtracts the integer 1).

new: creación de instancias de tipo.new – type instantiation.

typeof: devuelve el objeto Type que representa el operando.typeof – returns the Type object representing the operand.

checked: habilita la comprobación de desbordamiento para operaciones con enteros.checked – enables overflow checking for integer operations.

unchecked: deshabilita la comprobación de desbordamiento para operaciones con enteros.unchecked – disables overflow checking for integer operations. Este es el comportamiento predeterminado del compilador.This is the default compiler behavior.

default(T) genera el valor predeterminado del tipo T.default(T) – produces the default value of type T.

nameof: obtiene el nombre simple (incompleto) de una variable, tipo o miembro como una cadena constante.nameof - obtains the simple (unqualified) name of a variable, type, or member as a constant string.

delegate: declara y devuelve una instancia de delegado.delegate – declares and returns a delegate instance.

sizeof: devuelve el tamaño en bytes del operando de tipo.sizeof – returns the size in bytes of the type operand.

stackalloc: asigna un bloque de memoria en la pila.stackalloc - allocates a block of memory on the stack.

->: direccionamiento indirecto del puntero combinado con acceso a miembros.-> – pointer indirection combined with member access.

Operadores unariosUnary operators

Estos operadores tienen mayor precedencia que los de la sección siguiente y menor que el de la anterior.These operators have higher precedence than the next section and lower precedence than the previous section.

+x: devuelve el valor de x.+x – returns the value of x.

-x: negación numérica.-x – numeric negation.

!x: negación lógica.!x – logical negation.

~x: complemento bit a bit.~x – bitwise complement.

++x: incremento de prefijo.++x – prefix increment. Devuelve el valor de x después de actualizar la ubicación de almacenamiento con el valor de x que es uno mayor (normalmente agrega el entero 1).Returns the value of x after updating the storage location with the value of x that is one greater (typically adds the integer 1).

--x: decremento de prefijo.--x – prefix decrement. Devuelve el valor de x después de actualizar la ubicación de almacenamiento con el valor de x que es uno menos (normalmente resta el entero 1).Returns the value of x after updating the storage location with the value of x that is one less (typically subtracts the integer 1).

(T)x: conversión de tipos.(T)x – type casting.

await: espera una Task.await – awaits a Task.

&x: dirección de una variable.&x – address of a variable.

*x: direccionamiento indirecto del puntero o desreferenciación.*x – pointer indirection, or dereference.

El operador true devuelve el valor bool true para indicar que un operando es definitivamente true.true operator - returns the bool value true to indicate that an operand is definitely true.

El operador false devuelve el valor bool true para indicar que un operado es definitivamente "false".false operator - returns the bool value true to indicate that an operand is definitely false.

Operadores de multiplicaciónMultiplicative operators

Estos operadores tienen mayor precedencia que los de la sección siguiente y menor que el de la anterior.These operators have higher precedence than the next section and lower precedence than the previous section.

x * y: multiplicación.x * y – multiplication.

x / y: división.x / y – division. Si los operandos son enteros, el resultado es un entero que se trunca hacia cero (por ejemplo, -7 / 2 is -3).If the operands are integers, the result is an integer truncated toward zero (for example, -7 / 2 is -3).

x % y: resto.x % y – remainder. Si los operandos son enteros, devuelve el resto de dividir x entre y.If the operands are integers, this returns the remainder of dividing x by y. Si q = x / y y r = x % y, entonces x = q * y + r.If q = x / y and r = x % y, then x = q * y + r.

Operadores aditivosAdditive operators

Estos operadores tienen mayor precedencia que los de la sección siguiente y menor que el de la anterior.These operators have higher precedence than the next section and lower precedence than the previous section.

x + y: suma.x + y – addition.

x – y: resta.x – y – subtraction.

Operadores de desplazamientoShift operators

Estos operadores tienen mayor precedencia que los de la sección siguiente y menor que el de la anterior.These operators have higher precedence than the next section and lower precedence than the previous section.

x << y: desplaza los bits a la izquierda y rellena con cero a la derecha.x << y – shift bits left and fill with zero on the right.

x >> y: desplaza los bits a la derecha.x >> y – shift bits right. Si el operando izquierdo es int o long, los bits de la izquierda se rellenan con el bit de signo.If the left operand is int or long, then left bits are filled with the sign bit. Si el operando izquierdo es uint o ulong, los bits de la izquierda se rellenan con cero.If the left operand is uint or ulong, then left bits are filled with zero.

Operadores de comprobación de tipos y relacionalesRelational and type-testing operators

Estos operadores tienen mayor precedencia que los de la sección siguiente y menor que el de la anterior.These operators have higher precedence than the next section and lower precedence than the previous section.

x < y: menor que (true si x es menor que y).x < y – less than (true if x is less than y).

x > y: mayor que (true si x es mayor que y).x > y – greater than (true if x is greater than y).

x <= y: menor o igual que.x <= y – less than or equal to.

x >= y: mayor o igual que.x >= y – greater than or equal to.

is: compatibilidad de tipos.is – type compatibility. Devuelve true si el operando izquierdo evaluado se puede convertir al tipo especificado en el operando derecho (un tipo estático).Returns true if the evaluated left operand can be cast to the type specified in the right operand (a static type).

as: conversión de tipos.as – type conversion. Devuelve el operando izquierdo convertido al tipo especificado por el operando derecho (un tipo estático), pero as devuelve null donde (T)x produciría una excepción.Returns the left operand cast to the type specified by the right operand (a static type), but as returns null where (T)x would throw an exception.

Operadores de igualdadEquality operators

Estos operadores tienen mayor precedencia que los de la sección siguiente y menor que el de la anterior.These operators have higher precedence than the next section and lower precedence than the previous section.

x == y: igualdad.x == y – equality. De forma predeterminada, para los tipos de referencia distintos de string, devuelve igualdad de referencia (prueba de identidad).By default, for reference types other than string, this returns reference equality (identity test). Sin embargo, los tipos pueden sobrecargar ==, por lo que si su intención es probar la identidad, es mejor usar el método ReferenceEquals en object.However, types can overload ==, so if your intent is to test identity, it is best to use the ReferenceEquals method on object.

x != y: distinto de.x != y – not equal. Vea el comentario de ==.See comment for ==. Si un tipo sobrecarga ==, debe sobrecargar !=.If a type overloads ==, then it must overload !=.

AND lógico (operador)Logical AND operator

Este operador tiene mayor precedencia que el de la sección siguiente y menor que el de la anterior.This operator has higher precedence than the next section and lower precedence than the previous section.

x & yAND lógico para los operandos bool o AND lógico bit a bit para los operandos de los tipos integrales.x & ylogical AND for the bool operands or bitwise logical AND for the operands of the integral types.

Operador lógico XORLogical XOR operator

Este operador tiene mayor precedencia que el de la sección siguiente y menor que el de la anterior.This operator has higher precedence than the next section and lower precedence than the previous section.

x ^ yXOR lógico para los operandos bool o XOR lógico bit a bit para los operandos de los tipos integrales.x ^ ylogical XOR for the bool operands or bitwise logical XOR for the operands of the integral types.

Operador lógico OR (||)Logical OR operator

Este operador tiene mayor precedencia que el de la sección siguiente y menor que el de la anterior.This operator has higher precedence than the next section and lower precedence than the previous section.

x | yOR lógico para los operandos bool o OR lógico bit a bit para los operandos de los tipos integrales.x | ylogical OR for the bool operands or bitwise logical OR for the operands of the integral types.

Operador condicional ANDConditional AND operator

Este operador tiene mayor precedencia que el de la sección siguiente y menor que el de la anterior.This operator has higher precedence than the next section and lower precedence than the previous section.

x && y: AND lógico.x && y – logical AND. Si el primer operando se evalúa como false, C# no evalúa el segundo operando.If the first operand evaluates to false, then C# does not evaluate the second operand.

Operador condicional ORConditional OR operator

Este operador tiene mayor precedencia que el de la sección siguiente y menor que el de la anterior.This operator has higher precedence than the next section and lower precedence than the previous section.

x || y: OR lógico.x || y – logical OR. Si el primer operando se evalúa como true, C# no evalúa el segundo operando.If the first operand evaluates to true, then C# does not evaluate the second operand.

Operador de uso combinado de nullNull-coalescing operator

Este operador tiene mayor precedencia que el de la sección siguiente y menor que el de la anterior.This operator has higher precedence than the next section and lower precedence than the previous section.

x ?? y: devuelve x si no es null; de lo contrario, devuelve y.x ?? y – returns x if it is non-null; otherwise, returns y.

Operador condicionalConditional operator

Este operador tiene mayor precedencia que el de la sección siguiente y menor que el de la anterior.This operator has higher precedence than the next section and lower precedence than the previous section.

t ? x : y: si la prueba t se evalúa como true, evalúa y devuelve x; en caso contrario, evalúa y devuelve y.t ? x : y – if test t evaluates to true, then evaluate and return x; otherwise, evaluate and return y.

Operadores de asignación y lambdaAssignment and lambda operators

Estos operadores tienen mayor precedencia que los de la sección siguiente y menor que el de la anterior.These operators have higher precedence than the next section and lower precedence than the previous section.

x = y: asignación.x = y – assignment.

x += y: incremento.x += y – increment. Agregue el valor de y al valor de x, almacene el resultado en x y devuelva el nuevo valor.Add the value of y to the value of x, store the result in x, and return the new value. Si x designa un evento, y debe ser un método adecuado que C# agregue como un controlador de eventos.If x designates an event, then y must be an appropriate method that C# adds as an event handler.

x -= y: decremento.x -= y – decrement. Reste el valor de y del valor de x, almacene el resultado en x y devuelva el nuevo valor.Subtract the value of y from the value of x, store the result in x, and return the new value. Si x designa un evento, y debe ser un método adecuado que C# quite como un controlador de eventos.If x designates an event, then y must be an appropriate method that C# removes as an event handler.

x *= y: asignación de multiplicación.x *= y – multiplication assignment. Multiplique el valor de y por el valor de x, almacene el resultado en x y devuelva el nuevo valor.Multiply the value of y to the value of x, store the result in x, and return the new value.

x /= y: asignación de división.x /= y – division assignment. Divida el valor de x por el valor de y, almacene el resultado en x y devuelva el nuevo valor.Divide the value of x by the value of y, store the result in x, and return the new value.

x %= y: asignación del resto.x %= y – remainder assignment. Divida el valor de x por el valor de y, almacene el resto en x y devuelva el nuevo valor.Divide the value of x by the value of y, store the remainder in x, and return the new value.

x &= y: asignación de AND.x &= y – AND assignment. AND el valor de y con el valor de x, almacene el resultado en x y devuelva el nuevo valor.AND the value of y with the value of x, store the result in x, and return the new value.

x |= y: asignación de OR.x |= y – OR assignment. OR el valor de y con el valor de x, almacene el resultado en x y devuelva el nuevo valor.OR the value of y with the value of x, store the result in x, and return the new value.

x ^= y: asignación de XOR.x ^= y – XOR assignment. XOR el valor de y con el valor de x, almacene el resultado en x y devuelva el nuevo valor.XOR the value of y with the value of x, store the result in x, and return the new value.

x <<= y: asignación de desplazamiento a la izquierda.x <<= y – left-shift assignment. Desplace el valor de x a la izquierda y lugares, almacene el resultado en x y devuelva el nuevo valor.Shift the value of x left by y places, store the result in x, and return the new value.

x >>= y: asignación de desplazamiento a la derecha.x >>= y – right-shift assignment. Desplace el valor de x a la derecha y posiciones, almacene el resultado en x y devuelva el nuevo valor.Shift the value of x right by y places, store the result in x, and return the new value.

=>: declaración lambda.=> – lambda declaration.

Vea tambiénSee also