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

489
Vistas
¿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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar

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