c# - number - System.Convert.ToInt vs(int)
value types c# (4)
Noté en otra publicación, alguien había hecho algo como:
double d = 3.1415;
int i = Convert.ToInt32(Math.Floor(d));
¿Por qué usaron la función de conversión, en lugar de:
double d = 3.1415;
int i = (int)d;
que tiene un piso implícito y convertir.
Además, más preocupante, noté en algunos códigos de producción que estaba leyendo:
double d = 3.1415;
float f = Convert.ToSingle(d);
Es lo mismo que:
float f = (float)d;
¿Están todas esas conversiones por lo demás implícitas solo en la clase Convert para completar, o sirven para un propósito? Puedo entender la necesidad de .ToString (), pero no el resto.
Casting to int es un truncamiento implícito, no un piso implícito:
double d = -3.14;
int i = (int)d;
// i == -3
Elijo Math.Floor o Math.Round para hacer que mis intenciones sean más explícitas.
Convert.ToInt32 () se utiliza en cadenas ( http://msdn.microsoft.com/en-us/library/sf1aw27b.aspx ) mientras que la conversión solo se puede usar en tipos que tienen convertidores internos (tipos numéricos). El verdadero truco es decidir entre Int32.Parse y Convert.ToInt32 (). Convert.ToInt32 () tolera un parámetro nulo y devuelve 0 mientras Int32.Parse () arrojará una ArgumentNullException.
El redondeo también se maneja de manera diferente:
x = -2.5 (int) x = -2 Convert.ToInt32 (x) = - 2
x = -1.5 (int) x = -1 Convert.ToInt32 (x) = - 2
x = -0.5 (int) x = 0 Convert.ToInt32 (x) = 0
x = 0.5 (int) x = 0 Convert.ToInt32 (x) = 0
x = 1.5 (int) x = 1 Convert.ToInt32 (x) = 2
x = 2.5 (int) x = 2 Convert.ToInt32 (x) = 2
Observe que x = -1.5 y x = 1.5 casos.
En algunos algoritmos, el método de redondeo utilizado es fundamental para obtener la respuesta correcta.
Puede usar Convertir cuando tiene una cadena que desea convertir a una int
int i = Convert.ToInt32("1234");
Conversión y conversión arrojarán una excepción si fallan.
es decir, esto arrojará una excepción, no devolverá 0:
Convert.ToInt32("1234NonNumber");
En muchos casos, Convert y Casting tendrán el mismo resultado, pero un cast es muchas veces más fácil de leer.