vb.net - texto - * Sutil*¿Diferencias entre las funciones VB y las funciones Convert.To*?
funciones de conversion en visual basic (2)
Al convertir tipos, me he encontrado usando ambas funciones VB y métodos BCL Convert.To *.
P.ej)
-
Cstr()
vs.Convert.ToString()
-
CInt()
vs.Convert.ToInt32()
-
CDbl()
vs.Convert.ToInt64()
- etc ...
¿Hay alguna diferencia sutil que deba tenerse en cuenta?
Hay otra gran diferencia que acabo de descubrir y creo que vale la pena mencionar aquí, ¡aunque varios años después del OP! CInt({Boolean expression})
evalúa a -1 cuando es True
, mientras que Convert.ToInt<n>
evalúa a 1.
Esto podría atrapar a cualquiera que haya usado el anterior en una evaluación matemática, por ejemplo:
For i As Integer = 0 To 1 - CInt(processThirdItem) ''Evaluates to -1 (1 - -1 = 2)
''Do stuff...
Next
Por lo tanto, usar Convert.ToInt32
en lugar de CInt
no funcionaría a menos que haya cambiado el operador de -
a +
.
Por supuesto, la función If
cortocircuito de .NET proporciona una forma mucho mejor de hacerlo:
For i As Integer = 0 to If(processThirdItem, 2, 1)
''Do stuff...
Next
Esto ya se ha cubierto en principio, pero sí hay diferencias: básicamente, los ayudantes de VB harán un trabajo adicional para que analice dónde genéricos arrojarán una excepción y, en general, pero no universalmente, los ayudantes de VB son más rápidos (aunque No sé si es significativo) porque realmente son solo azúcar IL. Sazone al gusto.
Editar: Este chico lo cubre mejor que yo.
Editar Redux: Joel Coehoorn también recomienda el precursor del artículo anterior , y aparentemente tiene algunos puntos de referencia bajo la manga en alguna parte.
Joel escribió:
El resumen es el CInt () es un operador, mientras que Convert.ToInt32 () es una función. CInt vive en algún lugar entre (int) x; y Convert.ToInt32 (x) ;.