Pregunta

En .Net se puede leer una cadena de valor en otro tipo de datos utilizando <datatype>.parse o Convert.To<DataType>.

No estoy familiarizado con los fundamentos de analizar frente a convertir así que siempre estoy en una pérdida cuando se le preguntó cuál es el mejor/más rápido/más apropiado.

Así que es la mejor manera en qué tipo de circunstancias?

¿Fue útil?

Solución

El Convert.ToXXX() los métodos son los objetos que pueden ser correctas o de tipo similar, mientras que .Parse() y .TryParse() son específicamente para las 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 la optimización de banderas TryParse es muy rápido - es la mejor manera de conseguir un número de una cadena.Sin embargo, si usted tiene un objeto que podría ser un int o podría ser una cadena de Convertir.ToInt32 es más rápido.

Otros consejos

He aquí una respuesta para usted:

http://www.dotnetspider.com/forum/ViewForum.aspx?ForumId=77428

Aunque creo que en las versiones modernas de .NET, la mejor cosa a hacer es usar TryParse en cualquier caso, si hay alguna duda de que la conversión de trabajo.

Soy un gran fan de TryParse, ya que se ahorra un montón de dolores de cabeza de error de la captura de cuando hay una probabilidad de que el valor que vamos a analizar no es del tipo apropiado.

Mi pedido es:

  • Parse (si puedo estar seguro de que el valor será el tipo de derecho, y yo trato de garantizar este)
  • TryParse (si no puedo estar seguro, lo que ocurre cada vez que el usuario de entrada o de entrada de un sistema que no puede controlar)
  • Convertir (que creo que no los he usado desde que empecé a usar Analizar y TryParse, pero puedo estar equivocado)

También existe la DirectCast método que se debe utilizar sólo si está seguro de qué tipo de objeto es.Es más rápido, pero no hace ningún controles adecuados.Yo uso DirectCast cuando estoy extracción de valores de un escrito indirectamente DataTable cuando sé que el tipo de cada columna.

Si necesita velocidad, estoy bastante seguro de que un directo de fundición es la manera más rápida.Dicho esto, yo uso normalmente .Analizar o .TryParse porque se parece a hacer las cosas más fáciles de leer, y se comportan de una manera más predecible.

Convertir en realidad las llamadas Analizar bajo el capó, creo.Por lo que hay poca diferencia hay, y en realidad sólo parece ser una cuestión de gusto personal.

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