¿Son todos estos iguales? ¿En qué circunstancias debería elegir cada uno sobre los demás?
var.ToString ()
CStr (var)
CType (var, String)
DirectCast (var, String)
EDITAR: Sugerencia de NotMyself ...
- TryCast (var, String)
Esos son todos ligeramente diferentes y generalmente tienen un uso aceptable.
var.
ToString
()
te dará la representación de cadena de un objeto, independientemente de qué tipo sea. Use esto si aún var
no es una cadena.CStr
(var)
es el operador de conversión de cadena 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 que CType
.CType
(var, String)
convertirá el tipo dado en una cadena, utilizando cualquier operador de conversión proporcionado.DirectCast
(var, String)
se usa para convertir un objeto en una cadena. Si sabe que una variable de objeto es, de hecho, una cadena, use esto. Esto es lo mismo que (string)var
en C #.TryCast
(como lo menciona @ NotMyself ) es similar DirectCast
, pero regresará Nothing
si la variable no se puede convertir en una cadena, en lugar de lanzar una excepción. Esto es lo mismo que var as string
en C #. La TryCast
página en MSDN también tiene una buena comparación.
TryCast
solo funciona para los tipos de valor, ya que debe ser un tipo que pueda tenerNothing
como valorCStr(var)
se ahogará y generará una excepción si la var es DBNull.Value, pero la alternativaConvert.ToString(var)
devolverá una cadena vacía.Dim myList AS ArrayList=new ArrayList
Cuando escribes(From e In myList select CType(e.Name,String)).ToArray()
no funciona. Vine a escribir... select CType(e.Name.ToString,String)).ToArray()
y recuperé mi sonrisa.Cstr()
está compilado en línea para un mejor rendimiento.CType
permite conversiones entre tipos si se define un operador de conversiónToString()
Entre el tipo base y la cadena arroja una excepción si la conversión no es posible.TryParse()
De cadena a basetypeif
posible, de lo contrario devuelve falsoDirectCast
se usa si los tipos están relacionados por herencia o comparten una interfaz común, arrojará una excepción si el lanzamiento no es posible,trycast
no devolverá nada en este casofuente
MSDN parece indicar que las conversiones de Cxxx para tipos específicos pueden mejorar el rendimiento en VB .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 indica que es cuando hay una relación de herencia; creo que esto significa que la cordura del elenco se verifica en el momento de la compilación y las optimizaciones se pueden aplicar, mientras que CType siempre usa el Tiempo de ejecución de VB.)
Cuando escribo código VB .NET, lo que uso depende de lo que estoy haciendo. Si voy a tirar el código prototipo, uso lo que sea que escriba para escribir. Si se trata de código en serio, trato de usar un elenco de Cxxx. Si no existe uno, uso DirectCast si tengo una creencia razonable de que existe una relación de herencia. Si se trata de una situación en la que no tengo idea de si la conversión debería tener éxito (entrada del usuario -> enteros, por ejemplo), entonces uso TryCast para hacer algo más amigable que lanzar una excepción al usuario.
Una cosa que no puedo evitar es que tiendo a usar ToString en lugar de CStr, pero supuestamente Cstr es más rápido.
fuente
Prefiero la siguiente sintaxis:
Ja, se nota que normalmente escribo 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 transmisión. Su lanzamiento tiene éxito o su variable se inicializa a nulo y se ocupa de eso en consecuencia.
fuente
.ToString()
. Un tipo de valor, como Integer, no puede ser Nothing. Entonces, en este caso, CStr (número) o number.ToString () es seguro. En el caso general (no solo los tipos de valor), CStr (lo que sea) es seguro, ya que no puede manejar Nothing; el resultado será Nothing, en la variable String. TryCast es muy útil, pero no aquí.El usuario Konrad Rudolph aboga por DirectCast () en la pregunta de desbordamiento de pila "Características ocultas de VB.NET" .
fuente
String
, es poco probable que el OP esté discutiendo una situación en la que DirectCast es apropiado.String
yToString
, mi queja no se aplicaría. No debe abogar por DirectCast, hasta que haya reducido el tema de la CONVERSIÓN general.De acuerdo con el examen de certificación, debe usar Convert.ToXXX () siempre que sea posible para conversiones simples porque optimiza el rendimiento mejor que las conversiones CXXX.
fuente
En un momento, recuerdo haber visto el estado de la biblioteca de MSDN para usar CStr () porque era más rápido. Sin embargo, no sé si esto es cierto.
fuente