2008-08-20 19 views
13

En .Net puede leer un valor de cadena en otro tipo de datos usando <datatype>.parse o Convert.To<DataType>..Net Parse versus Convert

No estoy familiarizado con los fundamentos de parse versus convert así que siempre estoy perdido cuando me preguntan cuál es mejor/más rápido/más apropiado.

Entonces, ¿qué camino es mejor en qué tipo de circunstancias?

Respuesta

15

Los Convert.ToXXX() métodos son los objetos que podrían ser del tipo correcto o similares, mientras que .Parse() y .TryParse() son específicamente para cadenas:

//o is actually a boxed int 
object o = 12345; 

//unboxes it 
int castVal = (int) 12345; 

//o is a boxed enum 
object o = MyEnum.ValueA; 

//this will get the underlying int of ValueA 
int convVal = Convert.ToInt32(o); 

//now we have a string 
string s = "12345"; 

//this will throw an exception if s can't be parsed 
int parseVal = int.Parse(s); 

//alternatively: 
int tryVal; 
if(int.TryParse(s, out tryVal)) { 
    //do something with tryVal 
} 

Si se compila con parámetros de optimización TryParse es muy rápida - que es la mejor forma de obtener un número de una cadena. Sin embargo, si tiene un objeto que podría ser un int o podría ser una cadena Convert.ToInt32 es más rápido.

1

También existe el método DirectCast que debe usar solo si está seguro de cuál es el tipo de objeto. Es más rápido, pero no hace ningún control apropiado. Yo uso DirectCast cuando estoy extrayendo valores de una DataTable de mecanografía cuando conozco el tipo para cada columna.

1

Si necesita velocidad, estoy bastante seguro de que un lanzamiento directo es la manera más rápida. Dicho esto, normalmente utilizo .Parse o .TryParse porque parece facilitar las cosas para leer y comportarse de una manera más predecible.

Convert realmente llama a Parse bajo la capucha, creo. Entonces, hay poca diferencia allí, y realmente parece ser una cuestión de gusto personal.

3

Soy un gran admirador de TryParse, ya que le ahorra muchos dolores de cabeza por la captura de errores cuando existe la posibilidad de que el valor que vaya a analizar no sea del tipo apropiado.

Mi orden es por lo general:

  • Parse (si puedo estar seguro de que el valor será el tipo correcto, y yo tratar de asegurar esto)
  • TryParse (si no puedo estar seguro , lo que sucede cuando se trata de la entrada del usuario, o la entrada de un sistema que no puede controlar)
  • Convert (que creo que no he usado desde que empecé a usar analizar y TryParse, pero puedo estar equivocado)