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)
¿Fue útil?

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 si var 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 que CType.
  • 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 como DirectCast, pero va a volver Nothing si la variable no puede ser convertida en una cadena, en lugar de lanzar una excepción.Este es el mismo como var as string en C#.El TryCast 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.

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top