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

150
Vistas
objeto a estructurar con como operador

¿Por qué funciona el primero pero no el segundo? ¿Hay algo de qué preocuparse al convertir objetos en estructuras?

 struct Hex { /* ... */ } object actionData = GetData();

1:

 bool isHex = actionData is Hex; Hex hexx = (Hex)actionData;

2:

 Hex hex = actionData as Hex;
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Porque as operador devuelve null si falla la verificación de tipo:

La expresión de la forma E as T donde E es una expresión que devuelve un valor y T es el nombre de un tipo o un parámetro de tipo, produce el mismo resultado que: E is T ? (T)(E) : (T)null excepto que E solo se evalúa una vez.

Lo cual no se puede hacer si T es un tipo de valor no anulable (por lo que el compilador emite el error). Usar el tipo de valor anulable como T funcionará:

 object actionData = new Hex(); // your code returning boxed Hex Hex? hex = actionData as Hex?; if(hex.HasValue) { ... }
over 4 years ago · Santiago Trujillo Denunciar

0

Caso 1

Suponiendo que el resultado de GetData() es del tipo correcto (es decir, algo que se puede convertir en la estructura Hex ), lo siguiente se compilará con éxito y también funcionará en tiempo de ejecución

 struct Hex { ...} ... Hex foo = (Hex)GetData();

porque siempre puede escribir una conversión explícita (es decir, le está diciendo al compilador que sabe lo que está haciendo y no debería preocuparse por las posibles incompatibilidades)

Caso 2

Si el resultado de GetData() es algo, eso no se puede convertir en Hex con el mismo código

 struct Hex { ...} ... Hex foo = (Hex)GetData();

seguirá compilando con éxito (porque está anulando el compilador). Pero lanzará una InvalidCastException en tiempo de ejecución.

Caso 3

Su segundo fragmento ni siquiera se compilará. Porque el resultado del operador as es anulable (es decir as devuelve null si la verificación de tipo falla) y no puede asignar null a una estructura no anulable.

 struct Hex { ...} ... Hex hex = actionData as Hex;

Si desea poder compilar esto, debe hacer que la variable sea anulable como

 Hex? hex = actionData as Hex?; if (hex.HasValue) { ... //conversion succeeded } else { ... //conversion failed and hex is null }

o haces de Hex una class en lugar de una struct . Porque una class es un tipo de referencia que también puede ser null , pero una struct es un tipo de valor que no puede ser nulo.

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