- ¿Cuál es la principal diferencia entre
int.Parse()
yConvert.ToInt32()
? - ¿Cuál es el preferido?
Si tiene una cadena, y espera que siempre sea un número entero (por ejemplo, si algún servicio web le entrega un número entero en formato de cadena), lo usaría Int32.Parse()
.
Si está recopilando información de un usuario, generalmente la usaría Int32.TryParse()
, ya que le permite un control más detallado sobre la situación cuando el usuario ingresa información no válida.
Convert.ToInt32()
toma un objeto como argumento. (Vea la respuesta de Chris S para ver cómo funciona)
Convert.ToInt32()
tampoco arroja ArgumentNullException
cuando su argumento es nulo como lo Int32.Parse()
hace. Eso también significa que Convert.ToInt32()
probablemente sea un poco más lento que Int32.Parse()
, aunque en la práctica, a menos que esté haciendo una gran cantidad de iteraciones en un bucle, nunca lo notará.
ToInt32
método tiene una sobrecarga para muchos tipos, entre ellosSystem.String
, no se perderá tiempo en discernir el tipo. El código real no hace nada más que devolver 0 para valores nulos yint.Parse(value, CultureInfo.CurrentCulture)
para todo lo demás.Int32.TryParse()
inConvert.ToInt32()
porque es incorrecta. Convertir arroja una excepción si la cadena tiene un formato incorrecto.Echa un vistazo en reflector:
int.Parse ("32"):
que es un llamado a:
Convert.ToInt32 ("32"):
Como dice el primer comentario (de Dave M).
fuente
Convert.ToInt32
devuelve0
sinull
para evitarint.Parse
subir unArgumentNullException
.default(int)
se evalúa en tiempo de compilación, ya que es un valor intrínseco; el resultado de la expresión es0
, por lo que el compilador inserta un literal0
. Las herramientas de desmontaje de IL no pueden conocerlo mejor, por lo que solo le muestran un cero literal.No hay diferencia como tal.
Convert.ToInt32()
llamadasint.Parse()
internasExcepto por una cosa que
Convert.ToInt32()
regresa0
cuando el argumento esnull
De lo contrario, ambos funcionan de la misma manera
fuente
Convert.ToInt32(string)
llamaint.Parse
internamente.Convert.ToInt32(object)
, sin embargo, llamadas((IConvertible) value).ToInt32
, que en el caso de lasstring
llamadasConvert.ToInt32(string)
... un poco enrevesadas ...int.Parse (cadena s)
Convert.ToInt32 (cadena s)
bool isParsed = int. TryParse (cadena s, fuera res)
Pruebe este código a continuación .....
fuente
La diferencia es esta:
Int32.Parse()
yInt32.TryParse()
solo puede convertir cadenas.Convert.ToInt32()
puede tomar cualquier clase que implementeIConvertible
. Si le pasa una cadena, entonces son equivalentes, excepto que obtiene una sobrecarga adicional para las comparaciones de tipos, etc. Si está convirtiendo cadenas, entoncesTryParse()
probablemente sea la mejor opción.fuente
Int32.parse (string) --->
El método Int32.Parse (string s) convierte la representación de cadena de un número a su equivalente entero de 32 bits con signo. Cuando s es una referencia nula, arrojará ArgumentNullException. Si s no es un valor entero, arrojará FormatException. Cuando s representa un número menor que MinValue o mayor que MaxValue, arrojará OverflowException. Por ejemplo :
Convert.ToInt32 (string) -> El método Convert.ToInt32 (string s) convierte la representación de cadena especificada del equivalente entero de 32 bits con signo. Esto llama a su vez al método Int32.Parse (). Cuando s es una referencia nula, devolverá 0 en lugar de lanzar ArgumentNullException. Si s no es un valor entero, arrojará FormatException. Cuando s representa un número menor que MinValue o mayor que MaxValue, arrojará OverflowException.
Por ejemplo:
fuente
TryParse es más rápido ...
Fuente con ejemplos
Espero que esto ayude.
fuente
tiene 19 sobrecargas o 19 formas diferentes de llamarlo. Quizás más en las versiones de 2010.
Intentará convertir de los siguientes TIPOS;
y también tiene varios otros métodos; uno que tiene que ver con una base numérica y 2 métodos implican una
System.IFormatProvider
Parse, por otro lado, solo tiene 4 sobrecargas o 4 formas diferentes de llamar al método.
fuente
Depende del tipo de parámetro. Por ejemplo, hoy descubrí que convertirá un char directamente a int usando su valor ASCII. No es exactamente la funcionalidad que pretendía ...
¡USTED HA SIDO ADVERTIDO!
fuente
char
convertir implícitamentestring
en C #? Ciertamente puede en VB.NET, por lo que los programadores en ese lenguaje probablemente esperaríanConvert.ToInt32("1"c)
yConvert.ToInt32("1")
serían equivalentes, pero no creo que C # tenga esa conversión implícita.char
valores son un poco más numéricos que vb.net. El peligro sería mayor en vb.net, donde debido a un reparto implícito hay menos diferencia percibida entreChar
yString
.Aquí hay un detalle para
int.Parse
yConvert.ToInt32
: Digamos que tiene una matriz de caractereschar[] a=['1','2','3','4']
y desea convertir cada elemento en un entero. ElConvert.ToInt32(a[0])
le dará un número de 49. Lo trata como un código ASCII Elint.Parse(a[0])
le dará la salida correcta que es 1Si usted tiene una matriz de cadenas
string[] b=['1','2','3','4']
, a continuación,Convert.ToInt32
yint.Parse
no tendrá ninguna diferencia en la salida. Ambos devuelven el entero correcto.fuente
Convert.ToInt32 permite el valor nulo, no arroja ningún error Int.parse no permite el valor nulo, arroja un error ArgumentNullException.
fuente
para aclarar la aplicación de consola abierta, solo copie el código a continuación y péguelo en el
static void Main(string[] args)
método, espero que pueda entenderfuente
Los métodos Parse () proporcionan los estilos numéricos que no se pueden usar para Convert (). Por ejemplo:
analizaría los números con el signo final de modo que i == -123
El signo final es popular en los sistemas ERP.
fuente