¿Cómo debo emitidos en VB.NET?
Pregunta
Son todos iguales?Bajo qué circunstancias debo elegir cada uno sobre los demás?
var.ToString()
CStr(var)
CType(var, Cadena)
DirectCast(var, Cadena)
EDITAR:Sugerencia de NotMyself…
- TryCast(var, Cadena)
Solución
Todos esos son ligeramente diferentes, y generalmente tienen un uso aceptable.
var.
ToString
()
se va a dar la representación de cadena de un objeto, independientemente de qué tipo es.Use esta opción sivar
no es una cadena ya está.CStr
(var)
es el VB de la cadena de operador de conversión.Yo no soy un VB hombre, por lo que sugeriría que evitar, pero en realidad no va a doler nada.Creo que es básicamente el mismo queCType
.CType
(var, String)
vamos a convertir el tipo determinado en una cadena, utilizando cualquier proporcionado operadores de conversión.DirectCast
(var, String)
se utiliza para convertir un objeto en una cadena.Si usted sabe que una variable de objeto es, de hecho, una cadena, el uso de este.Este es el mismo como(string)var
en C#.TryCast
(como menciona @NotMyself) es comoDirectCast
, pero va a volverNothing
si la variable no puede ser convertida en una cadena, en lugar de lanzar una excepción.Este es el mismo comovar as string
en C#.ElTryCast
la página de MSDN tiene una buena comparación, también.
Otros consejos
Cstr()
se compilan en línea para un mejor rendimiento.
CType
permite arroja entre los tipos de si un operador de conversión se define
ToString()
Entre la base del tipo y de la cadena lanza una excepción si la conversión no es posible.
TryParse()
De Cadena de caracteres a base de typeif
posible, de lo contrario, devuelve false
DirectCast
se utiliza si los tipos están relacionados a través de la herencia o comparten una interfaz común , producirá una excepción si la conversión no es posible, trycast
va a devolver nada en este caso
Yo prefiero la siguiente sintaxis:
Dim number As Integer = 1
Dim str As String = String.TryCast(number)
If str IsNot Nothing Then
Ja se puede decir que me suelen escribir código en C#.8)
La razón por la que prefieren TryCast es que usted no tiene que meterse con la sobrecarga de fundición de excepciones.El yeso se realiza correctamente o la variable se inicializa a null y no lidiar con eso en consecuencia.
MSDN parece indicar que el Cxxx moldes para tipos específicos puede mejorar el rendimiento en VB .NETA, ya que se convierten a código en línea.Por alguna razón, se sugiere también DirectCast como contraposición a CType en algunos casos (las documentaciones de los estados es cuando hay una relación de herencia;Yo creo que esto significa que la cordura de la fundición se comprueban en tiempo de compilación y se pueden aplicar las optimizaciones mientras que CType siempre utiliza el VB tiempo de ejecución).
Cuando estoy escribiendo VB .NET de código, lo que depende de lo que yo estoy haciendo.Si es el prototipo de código que me voy a tirar, yo uso lo que se me ocurre escribir.Si es el código que estoy en serio, yo intente utilizar un Cxxx emitidos.Si no existe uno, yo uso DirectCast si tengo una creencia razonable de que hay una relación de herencia.Si se trata de una situación en la que no tengo idea de si el yeso debe tener éxito (entrada de usuario -> números enteros, por ejemplo), entonces yo uso TryCast así como para hacer algo más agradable que lanzar una excepción en el usuario.
Una cosa que no puedo deshacerme es que tienden a usar ToString en lugar de CStr pero supuestamente Cstr es más rápido.
Usuario Konrad Rudolph los defensores de la para DirectCast() en el Desbordamiento de Pila pregunta "Características Ocultas de VB.NET".
De acuerdo con el examen de certificación debe utilizar Convertir.ToXXX() siempre que sea posible para simples conversiones porque se optimiza el rendimiento mejor que CXXX conversiones.
Al mismo tiempo, yo recuerdo haber visto en la biblioteca MSDN estado para uso CStr (), porque es más rápido.No sé si esto es cierto, aunque.