trycast sirve que para net ejemplos vb.net casting

sirve - directcast vb.net ejemplos



¿Por qué utilizar TryCast en lugar de DirectCast? (4)

(Para los desarrolladores de C #, TryCast es similar a "como" y DirectCast es el equivalente a la conversión normal. Como señaló Mike en los comentarios, "como" funciona para tipos de valores que TryCast valores TryCast , pero TryCast no lo hace).

Si el valor realmente debería ser una T, entonces DirectCast es, de hecho, el camino correcto: falla rápidamente, con un error apropiado.

TryCast es apropiado cuando es legítimo que el objetivo sea del tipo "incorrecto". Por ejemplo, para obtener todos los controles de botón en un contenedor, puede ir a través de la colección de control e intentar convertir cada uno en un botón. Si funciona, haces algo con él; si no funciona, sigues adelante. (Con LINQ puedes usar OfType para este propósito, pero ya ves lo que quiero decir ...)

En mi experiencia, el casting directo es más apropiado que TryCast , aunque con genéricos me encuentro lanzando mucho menos veces de lo que solía hacerlo.

Cuando estoy tratando de lanzar Object obj a Type T, si no se puede lanzar, entonces hay algo mal.

Y después de lanzar el objeto, buscaré trabajar con el objeto fundido.

Más bien, esperaré obtener una excepción en el lugar donde la lanzaré antes que decir dónde usaré ese objeto.

En este sentido, ¿es mejor usar DirectCast lugar de TryCast ? ¿O me falta algún otro significado de usar TryCast?


Creo que los otros mencionaron los momentos en los que deberías y no deberías realizar un "casting seguro" (donde aseguras que el reparto puede tener éxito antes de arriesgar una excepción). Si su programa necesita realizar un casting seguro, el método TryCast le ahorrará trabajo a usted y al programa.

Hasta el día de hoy no conocía la función TryCast (), y me siento como un tonto por usar el método "malo" para lanzar de forma segura.

Si no conocía la función TryCast (), podría terminar con algo como esto:

'''' wasteful, the TypeOf and DirectCast calls are redundant If TypeOf obj Is SomeClass Then someObj = DirectCast(obj, SomeClass) '''' More code End If

El problema es que este método realmente realiza dos moldes (técnicamente creo que en realidad son verificaciones de tipo). Usar TryCast y verificar si el resultado es Nothing elimina el 2nd cast y ahorra trabajo innecesario.

'''' efficient, only one cast is ever performed and there are no InvalidCastExceptions thrown someObj = TryCast(obj, SomeClass) If someObj IsNot Nothing Then '''' More code End If

Seguir este patrón le permite evitar tener que manejar costosas excepciones y emitir de manera eficiente al tipo correcto.


La única diferencia entre los dos es que, un TryCast devolverá un nulo si falla, mientras que un DirectCast lanzará una excepción.

Esto tiene implicaciones sobre cómo puede manejar su programa. Personalmente, prefiero no tener que lanzar una excepción si la posibilidad de un reparto incorrecto (por ej., Cuadros de entrada de texto para la entrada de datos del usuario en tipos numéricos) es bastante alta.


Si su diseño exige que el objeto pasado a usted DEBE ser de tipo T, entonces afirme (como en Debug.Assert) que el molde tiene éxito en las construcciones de depuración y ejecute pruebas unitarias exhaustivas para demostrar que su implementación sigue su diseño.

Con su diseño probado y probado, puede realizar el lanzamiento directo sabiendo que nunca puede fallar.