Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

369
Views
¿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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!