news - .Net Parse versus Convert
new features c# (5)
Aquí hay una respuesta para ti:
http://www.dotnetspider.com/forum/ViewForum.aspx?ForumId=77428
Aunque creo que en las versiones modernas de .NET, lo mejor que se puede hacer es usar TryParse en cualquier caso, si hay alguna duda de que la conversión funcionará.
En .Net puede leer un valor de cadena en otro tipo de datos usando <datatype>.parse
o Convert.To<DataType>
.
No estoy familiarizado con los fundamentos de parse versus convert, por lo 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?
Los métodos Convert.ToXXX()
son para objetos que pueden ser del tipo correcto o similar, 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 compila con indicadores de optimización, TryParse es muy rápido: es la mejor manera 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.
Si necesitas 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 el capó, creo. Entonces, hay poca diferencia allí, y realmente parece ser una cuestión de gusto personal.
Soy un gran admirador de TryParse , ya que te ahorra muchos dolores de cabeza por la captura de errores cuando existe la posibilidad de que el valor que vas a analizar no sea del tipo apropiado.
Mi orden es usualmente:
- Parse (si puedo estar seguro de que el valor será el correcto, y trato 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 Parse y TryParse, pero podría estar equivocado)
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.