Tu comprensión es verdadera. Eso suena como tratar de micro-optimizar para mí. Debe usar un yeso normal cuando esté seguro del tipo. Además de generar una excepción más sensata, también falla rápidamente. Si se equivoca sobre su hipótesis sobre el tipo, el programa fallará inmediatamente y usted será capaz de ver la causa del fracaso de inmediato en lugar de esperar a que una NullReferenceExceptiono ArgumentNullExceptionni siquiera un error lógico en algún momento en el futuro. En general, una asexpresión que no es seguida por un nullcheque en alguna parte es un olor a código.
Por otro lado, si no está seguro sobre el yeso y espera que falle, debe usarlo en aslugar de un yeso normal envuelto con un try-catchbloque. Además, asse recomienda el uso de una verificación de tipo seguida de un yeso. En vez de:
if (x is SomeType)
((SomeType)x).SomeMethod();
que genera una isinstinstrucción para la ispalabra clave y una castclassinstrucción para el reparto (realizar efectivamente el reparto dos veces), debe usar:
var v = x as SomeType;
if (v != null)
v.SomeMethod();
Esto solo genera una isinstinstrucción. El primer método tiene una falla potencial en aplicaciones de subprocesos múltiples, ya que una condición de carrera puede hacer que la variable cambie su tipo después de que la isverificación se haya realizado correctamente y falle en la línea de lanzamiento. El último método no es propenso a este error.
La siguiente solución no se recomienda para su uso en el código de producción. Si realmente odias una construcción tan fundamental en C #, podrías considerar cambiar a VB u otro lenguaje.
En caso de que uno odie desesperadamente la sintaxis del elenco, puede escribir un método de extensión para imitar el elenco:
public static T To<T>(this object o) { // Name it as you like: As, Cast, To, ...
return (T)o;
}
y use una sintaxis ordenada [?]:
obj.To<SomeType>().SomeMethod()