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

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

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 Report

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