Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

371
Vistas
¿Se implementa un operador += b de char igual que a = a + b?

Encontré un problema interesante que el siguiente código se ejecuta con un resultado diferente:

 char c = 'a'; c += 'a'; //passed c = c + 'a'; //Cannot implicitly convert type 'int' to 'char'. An explicit conversion exists (are you missing a cast?)

¿Hay alguna diferencia entre a += b y a=a+b , o simplemente se perdió la verificación del código del compilador?

Mi punto es por qué char += char puede pasar la verificación de código mientras que char = (char+char) consideró char = int ?

about 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Especificación de C# , Sección 7.17.2 Asignación de compuestos:

Una operación de la forma x op= y se procesa aplicando la resolución de sobrecarga del operador binario (§7.3.4) como si la operación se escribiera x op y . Después,

...

• De lo contrario, si el operador seleccionado es un operador predefinido, si el tipo de retorno del operador seleccionado es explícitamente convertible al tipo de x , y si y es implícitamente convertible al tipo de x o el operador es un operador de desplazamiento, entonces el la operación se evalúa como x = (T)(x op y) , donde T es el tipo de x , excepto que x se evalúa solo una vez

Y esa es exactamente la situación que tenemos aquí. El tipo de retorno de la operación es int pero los tipos de x e y son ambos char , por lo que se inserta automáticamente una conversión adicional para nosotros.

(Creo que esta regla existe porque no hay ningún lugar para que usted pueda insertar un molde explícito usted mismo y se "espera" que funcione, especialmente en los casos en que x e y son del mismo tipo)

about 4 years ago · Santiago Trujillo Denunciar

0

En el segundo caso, es la tarea la que está fallando, no el cálculo en sí. Si lanza explícitamente el resultado en la segunda línea a un carácter, funciona bien y, de hecho, las siguientes tres líneas generan IL idénticos:

 c += (char)1; c = (char)(c + (char)1); c = (char)(c + 1);

Entonces sí. Hay una diferencia.

Tenga en cuenta que en la tercera línea no me molesté en convertir el 1 en char , ya que el cálculo simplemente lo convertirá de nuevo en un int de todos modos.

about 4 years ago · Santiago Trujillo Denunciar

0

El tipo resultante de += es char en este caso y el tipo resultante de c + (char)1 es int.

Se imprime el siguiente código:

o1 Sistema.Char o2 Sistema.Int32

 public static void Main(string[] args) { char c = 'a'; object o1 = c += (char)1; object o2 = c + (char)1; WriteLine("o1 " + o1.GetType()); WriteLine("o2 " + o2.GetType()); }
about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda