.net - trycast - vb net cast object to combobox
¿Cómo debería lanzar en VB.NET? (7)
De acuerdo con el examen de certificación, debe usar Convert.ToXXX () siempre que sea posible para conversiones simples, ya que optimiza el rendimiento mejor que las conversiones CXXX.
¿Son todos estos iguales? ¿En qué circunstancias debo elegir cada una sobre las demás?
var.ToString ()
CStr (var)
CType (var, String)
DirectCast (var, String)
EDITAR: Sugerencia de NotMyself ...
- TryCast (var, String)
El usuario Konrad Rudolph aboga por DirectCast () en la pregunta de desbordamiento de pila "Características ocultas de VB.NET" .
En un momento, recuerdo haber visto el estado de la biblioteca de MSDN para usar CStr () porque era más rápido. No sé si esto es cierto sin embargo.
Esos son todos ligeramente diferentes, y generalmente tienen un uso aceptable.
var.
ToString
()
le dará la representación de cadena de un objeto, independientemente de qué tipo sea. Use esto sivar
ya no es una cadena.-
CStr
(var)
es el operador deCStr
cadenas VB. No soy un tipo VB, por lo que sugeriría evitarlo, pero en realidad no va a doler nada. Creo que es básicamente lo mismo queCType
. -
CType
(var, String)
convertirá el tipo dado en una cadena, utilizando cualquier operador de conversión provisto. -
DirectCast
(var, String)
se usa para convertir un objeto en una cadena. Si sabes que una variable de objeto es, de hecho, una cadena, úsala. Esto es lo mismo que(string)var
en C #. -
TryCast
(como se menciona en @ NotMyself ) es comoDirectCast
, pero devolveráNothing
si la variable no se puede convertir en una cadena, en lugar de arrojar una excepción. Esto es lo mismo quevar as string
en C #. La página deTryCast
en MSDN también tiene una buena comparación.
Prefiero la siguiente sintaxis:
Dim number As Integer = 1
Dim str As String = String.TryCast(number)
If str IsNot Nothing Then
Ja, puedes decir que normalmente escribo el código en C #. 8)
La razón por la que prefiero TryCast es que no tiene que meterse con la sobrecarga de las excepciones de conversión. Tu conversión tiene éxito o tu variable se inicializa a nula y lidias con eso en consecuencia.
MSDN parece indicar que las conversiones de Cxxx para tipos específicos pueden mejorar el rendimiento en .NET porque se convierten en código en línea. Por alguna razón, también sugiere DirectCast en lugar de CType en ciertos casos (la documentación dice que es cuando hay una relación de herencia, creo que esto significa que la cordura del elenco se controla en tiempo de compilación y las optimizaciones se pueden aplicar, mientras que CType siempre usa el Tiempo de ejecución de VB).
Cuando estoy escribiendo código VB .NET, lo que uso depende de lo que estoy haciendo. Si es un código prototipo que voy a tirar, uso lo que sea que escriba. Si se trata de un código que me preocupa, trato de usar un elenco Cxxx. Si no existe uno, uso DirectCast si tengo una creencia razonable de que hay una relación de herencia. Si es una situación en la que no tengo idea de si el reparto debe tener éxito (entrada de usuario -> enteros, por ejemplo), entonces uso TryCast para hacer algo más amigable que lanzar una excepción al usuario.
Algo que no puedo evitar es que tiendo a usar ToString en lugar de CStr, pero supuestamente Cstr es más rápido.
Cstr()
se compila en línea para un mejor rendimiento.
CType
permite conversiones entre tipos si se define un operador de conversión
ToString()
Entre el tipo de base y la cadena arroja una excepción si la conversión no es posible.
TryParse()
De cadena a base de typeif
si es posible, de lo contrario devuelve falso
DirectCast
usa si los tipos están relacionados por herencia o comparten una interfaz común, lanzará una excepción si el reparto no es posible, trycast
no devolverá nada en esta instancia