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

487
Views
¿Por qué ?: causa un error de conversión mientras que if-else no lo hace?

Haciendo algunos cambios en el código, uso la siguiente línea:

 uint a = b == c ? 0 : 1;

Visual Studio me muestra este error:

No se puede convertir implícitamente el tipo 'int' a 'uint'. Existe una conversión explícita (¿falta un reparto?)

Pero si uso el código:

 uint a; if (b == c) a = 0; else a = 1;

Funciona correctamente sin ningún error o advertencia. ¿Por qué?

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Debe usar literales para que su código funcione correctamente de esta manera:

 uint a = b == c ? 0U : 1U;
over 4 years ago · Santiago Trujillo Report

0

¿Por qué no puedo usar uint a = b == c ? 0 : 1; ?

El tipo de la expresión b == c ? 0 : 1 es int . Como se muestra en esta tabla , no hay una conversión implícita de int a uint , por lo que no está permitido.

¿Por qué puedo usar a = 0 ?

Porque hay un tratamiento especial de los tipos numéricos cuando el valor es una expresión constante.

De la sección 6.1.9 de la especificación de C#:

  • Una expresión constante de tipo int se puede convertir a tipo sbyte, byte, short, ushort, uint o ulong, siempre que el valor de la expresión constante esté dentro del rango del tipo de destino.

  • Una expresión constante de tipo long se puede convertir a tipo ulong, siempre que el valor de la expresión constante no sea negativo.

Como se indica en la primera viñeta a = 0 y a = 1 están permitidos porque 0 y 1 son expresiones constantes y son valores uint válidos. Básicamente, esto se reduce a que el compilador puede determinar fácilmente en el momento de la compilación que estas conversiones son válidas, por lo que las permite.

Por cierto, si la parte b == c de su primer ejemplo se cambiara a una expresión constante (por ejemplo, true ), entonces toda la expresión del operador condicional sería una expresión constante y el código se compilaría.

over 4 years ago · Santiago Trujillo Report

0

Si b==c fuera una expresión constante, entonces todo el operador condicional se consideraría una expresión constante y, por lo tanto, se aplicaría la regla que permite convertir expresiones constantes de tipo int a otros tipos int y se compilaría.

Obviamente, b==c no es una expresión constante y, por lo tanto, el resultado del operador condicional no se puede conocer hasta el tiempo de ejecución, por lo que no se aplica la exención que permite una conversión implícita de ints a uint (para expresiones constantes).

En su variante if / else , ambas asignaciones reales son expresiones constantes.

over 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!