2010-08-15 8 views
5

Podría escribir lo siguiente para convertir un objeto a un número entero.¿Cuál es la diferencia entre Convert y Parse?

Convert.ToInt32(myObject); 

Pero también podría escribir

Int.Parse(myObject.ToString()); 
  • ¿Hay alguna diferencia?
  • ¿Cuál debería estar usando?

Gracias de antemano.

+0

posible duplicado de [Cuál es la principal diferencia entre int.Parse() y Convert.ToInt32] (http://stackoverflow.com/questions/199470/whats-the-main-difference-between-int-parse-and -convert-toint32) – nawfal

Respuesta

4
  • ¿Hay alguna diferencia?

Sí, Int32.parse(myObject.ToString()); toma un desvío a la cadena, que por lo general trabajan pero es innecesaria y podría fallar o dar un resultado diferente.

  • ¿Cuál debería estar utilizando?

En general, Convert.ToInt32(myObject);

Pero depende de qué tipo de datos que desea convertir.

Si myObject = '1';, ¿quiere 1 o 49?

Si myObject = false;, ¿quiere 0 o una excepción?

etc

1

Esta forma Convert.ToInt32 fuente método parece

public static int ToInt32(object value) { 
    return value == null? 0: ((IConvertible)value).ToInt32(null); 
} 

Siempre y cuando su objeto aplicar IConvertible interface que debe llamar a este método.

+0

Si el objeto implementó IConvertable, ¿hay algo que me detenga usando (IConvertible) myObject, por lo tanto, cortando una llamada de función. –

+0

Si está seguro de que no es nulo, debe llamar a este método directamente, pero tenga en cuenta que en esta forma puede ser optimizado por el compilador para que el método se inline. – jethro

1

De acuerdo con documentation, dependerá del objeto y si implementa o no la interfaz IConvertible. Hay una serie de razones que hacen que estos enfoques sean diferentes. Notablemente, si la representación de cadena no representa el valor entero correspondiente (por ejemplo, "{Value = 123}") o el objeto no es IConvertible. Elegiría usar Convert.ToInt32() ya que la conversión está definida por el tipo y no depende de alguna propiedad observada que podría cambiar en el futuro.

0

Por lo que yo sé, convertir y Parse difieren de muchas maneras:

Convertir medios para lanzar un objeto a partir de su tipo original a otro tipo (si es posible) .Sin embargo los dos objetos son iguales en alguna manera su propio contexto, por ejemplo, "32" es la versión de cadena de 32 (como un entero). En algunos lenguajes como Visual Basic, este tipo de conversión puede ocurrir implícitamente.

Parsear significa aceptar una entrada (generalmente en forma de una cadena) y traducirla a un objeto que puede ser algo totalmente diferente. Tome la fecha como ejemplo: podemos analizar "20 de julio de 2010", que es una cadena a una fecha. Significa que tenemos que traducir la cadena proporcionada a un objeto de fecha que tiene 20 como día, 7 como mes y 2010 como año. Es obvio que esta tarea no es sencilla y debe existir una lógica para analizar la cadena.

Cuestiones relacionadas