Lo que no se menciona en las respuestas anteriores es intención - ¿por qué realizar la conversión, y (lo más importante) lo que sucede en las líneas después de la conversión ?
Por ejemplo, he visto un código similar al siguiente varias veces:
if ((foo as SomeType).SomeMethod()) { /* ... */ }
Esto podría ser comparado con la versión fundido usando:
if (((SomeType) foo).SomeMethod()) { /* ... */ }
Entonces, ¿cuál de estos es mejor?
El elenco es.
El uso de as
dará como resultado un NullReferenceException
si la conversión falla.
El uso de un yeso dará como resultado un InvalidCastException
si la conversión falla.
Ahora dime, ¿cuál es una excepción más útil para la depuración? A NullReferenceException
, que podría ser producido por casi cualquier cosa, o un InvalidCastException
, que le permite saber qué salió mal en realidad.
Por lo tanto, solamente uso as
si la conversión es realidad opcional (lo que significa que hay debe ser un cheque null
antes de usar la variable). De lo contrario, use un molde, lo que hace que sus intenciones sean más explícitas.
Déjenme actualizar mi código Jon con un tipo de referencia. – Xaisoft
No hay mucha necesidad - He explicado más en mi respuesta ahora :) –
Muchas gracias, de hecho lo actualicé con un GridView, pero tu respuesta es lo suficientemente buena. – Xaisoft