Saltar al contenido

¿Cuál es la diferencia entre Convert.ToInt32 y (int)?

Deseamos brindarte la mejor respuesta que descubrimos en internet. Nosotros esperamos que te resulte de mucha ayuda y si puedes compartir algún detalle que nos pueda ayudar a perfeccionar nuestra información hazlo libremente.

Solución:

(int)foo es simplemente un lanzamiento a la Int32 (int en C#) tipo. Esto está integrado en el CLR y requiere que foo ser una variable numérica (por ejemplo float, longetc.) En este sentido, es muy similar a un molde en C.

Convert.ToInt32 está diseñado para ser una función de conversión general. Hace mucho más que lanzar; es decir, puede convertir de ningún tipo primitivo a un int (sobre todo, analizar un string). Puede ver la lista completa de sobrecargas para este método aquí en MSDN.

Y como Stefan Steiger menciona en un comentario:

Además, tenga en cuenta que a nivel numérico, (int) foo trunca foo (ifoo = Math.Floor(foo)), tiempo Convert.ToInt32(foo) usa la mitad para redondear (redondea x.5 al entero PAR más cercano, lo que significa ifoo = Math.Round(foo)). El resultado es, por lo tanto, no solo en términos de implementación, sino también numéricamente no lo mismo.

(esta línea se relaciona con una pregunta que se fusionó) Nunca debe usar (int)someString – eso nunca funcionará (y el compilador no te lo permitirá).

Sin embargo, int int.Parse(string) y bool int.TryParse(string, out int) (y sus diversas sobrecargas) son un juego limpio.

Personalmente yo principalmente uso único Convert cuando estoy lidiando con la reflexión, entonces para mí la elección es Parse y TryParse. La primera es cuando yo suponer el valor sea un entero válido, y quiero que arroje una excepción de lo contrario. La segunda es cuando quiero controlar si es un número entero válido, entonces puedo decidir qué hacer cuando lo es/no lo es.

Para citar este artículo de Eric Lippert:

Cast significa dos cosas contradictorias: “comprueba si este objeto realmente es de este tipo, tira si no lo es” y “este objeto no es del tipo dado; encuéntrame un valor equivalente que pertenezca al tipo dado”.

Entonces, lo que estaba tratando de hacer en 1.) es afirmar que sí, una Cadena es un Int. Pero esa afirmación falla ya que String no es un int.

La razón 2.) tiene éxito porque Convert.ToInt32() analiza el string y devuelve un int. Todavía puede fallar, por ejemplo:

Convert.ToInt32("Hello");

Daría como resultado una excepción Argumento.

En resumen, la conversión de String a Int es una preocupación del marco, no algo implícito en el sistema de tipo .Net.

Sección de Reseñas y Valoraciones

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *