- Quelle est la principale différence entre
int.Parse()
etConvert.ToInt32()
? - Lequel est à privilégier
Si vous avez une chaîne et que vous vous attendez à ce qu'elle soit toujours un entier (par exemple, si un service Web vous remet un entier au format chaîne), vous l'utiliseriez Int32.Parse()
.
Si vous collectez des entrées d'un utilisateur, vous les utiliseriez généralement Int32.TryParse()
, car cela vous permet un contrôle plus précis de la situation lorsque l'utilisateur entre des entrées non valides.
Convert.ToInt32()
prend un objet comme argument. (Voir la réponse de Chris S pour savoir comment cela fonctionne)
Convert.ToInt32()
ne lance pas non plus ArgumentNullException
lorsque son argument est nul comme le Int32.Parse()
fait. Cela signifie également que Convert.ToInt32()
c'est probablement un peu plus lent que Int32.Parse()
, bien qu'en pratique, à moins que vous ne fassiez un très grand nombre d'itérations dans une boucle, vous ne le remarquerez jamais.
ToInt32
méthode a une surcharge pour des charges de types, il n'y aSystem.String
pas de temps entre eux pour discerner le type. Le code réel ne fait que renvoyer 0 pour les valeurs nulles etint.Parse(value, CultureInfo.CurrentCulture)
pour tout le reste.Int32.TryParse()
dansConvert.ToInt32()
car elle est incorrecte. Convert lève une exception si la chaîne n'est pas formatée correctement.Jetez un oeil dans le réflecteur:
int.Parse ("32"):
qui est un appel à:
Convert.ToInt32 ("32"):
Comme le premier commentaire (de Dave M) le dit.
la source
Convert.ToInt32
retourne0
sinull
pour empêcherint.Parse
de lever unArgumentNullException
.default(int)
est évaluée au moment de la compilation, car c'est une valeur intrinsèque - le résultat de l'expression est0
, donc le compilateur insère un littéral0
. Les outils de désassemblage IL ne peuvent pas mieux connaître, ils vous montrent donc simplement un zéro littéral.Aucune différence en tant que telle.
Convert.ToInt32()
appels enint.Parse()
interneSauf pour une chose qui
Convert.ToInt32()
revient0
quand l'argument estnull
Sinon, les deux fonctionnent de la même manière
la source
Convert.ToInt32(string)
appelle enint.Parse
interne.Convert.ToInt32(object)
, cependant, les appels((IConvertible) value).ToInt32
, qui dans le cas d'string
appelsConvert.ToInt32(string)
... un peu alambiqués ...int.Parse (chaîne s)
Convert.ToInt32 (chaîne s)
bool isParsed = int.TryParse (chaîne s, out res)
Essayez ce code ci-dessous .....
la source
La différence est la suivante:
Int32.Parse()
etInt32.TryParse()
ne peut convertir que des chaînes.Convert.ToInt32()
peut prendre n'importe quelle classe qui implémenteIConvertible
. Si vous lui passez une chaîne, ils sont équivalents, sauf que vous obtenez des frais supplémentaires pour les comparaisons de types, etc. Si vous convertissez des chaînes,TryParse()
c'est probablement la meilleure option.la source
Int32.parse (chaîne) --->
La méthode Int32.Parse (string s) convertit la représentation sous forme de chaîne d'un nombre en son équivalent entier signé 32 bits. Lorsque s est une référence nulle, il lèvera ArgumentNullException. Si s est différent de la valeur entière, il lèvera FormatException. Lorsque s représente un nombre inférieur à MinValue ou supérieur à MaxValue, il lèvera OverflowException. Par exemple :
Convert.ToInt32 (string) -> La méthode Convert.ToInt32 (string s) convertit la représentation de chaîne spécifiée de l'équivalent d'entier signé 32 bits. Cela appelle tour à tour la méthode Int32.Parse (). Lorsque s est une référence nulle, il retournera 0 plutôt que de lancer ArgumentNullException. Si s est différent de la valeur entière, il lèvera FormatException. Lorsque s représente un nombre inférieur à MinValue ou supérieur à MaxValue, il lèvera OverflowException.
Par exemple:
la source
TryParse est plus rapide ...
Source avec des exemples
J'espère que cela t'aides.
la source
a 19 surcharges ou 19 façons différentes que vous pouvez appeler. Peut-être plus dans les versions 2010.
Il tentera de convertir à partir des TYPES suivants;
et il a également un certain nombre d'autres méthodes; un à voir avec une base numérique et 2 méthodes impliquent un
System.IFormatProvider
Parse, d'autre part, n'a que 4 surcharges ou 4 façons différentes d'appeler la méthode.
la source
Cela dépend du type de paramètre. Par exemple, je viens de découvrir aujourd'hui qu'il convertira un char directement en int en utilisant sa valeur ASCII. Pas exactement la fonctionnalité que je voulais ...
TU ÉTAIS PRÉVENU!
la source
char
convertir implicitementstring
en C #? Il peut certainement en VB.NET, et donc les programmeurs dans ce langage s'attendraient probablementConvert.ToInt32("1"c)
etConvert.ToInt32("1")
seraient équivalents, mais je ne pense pas que C # a cette conversion implicite.char
valeurs comme étant un peu plus numérotées que vb.net. Le danger serait plus grand dans vb.net, où à cause d'une distribution implicite, il y a moins de différence perçue entreChar
etString
.Voici un détail pour
int.Parse
etConvert.ToInt32
: Disons que vous avez un tableau de caractèreschar[] a=['1','2','3','4']
et que vous voulez convertir chaque élément en entier. LeConvert.ToInt32(a[0])
vous donnera un nombre de 49. Il le traite comme du code ASCII Leint.Parse(a[0])
vous donnera la bonne sortie qui est 1Si vous avez un tableau de chaînes
string[] b=['1','2','3','4']
, alorsConvert.ToInt32
etint.Parse
n'aura aucune différence de sortie. Les deux renvoient le bon entier.la source
Convert.ToInt32 autorise la valeur null, il ne génère aucune erreur. Int.parse n'autorise pas la valeur null, il génère une erreur ArgumentNullException.
la source
pour clarifier l'application console ouverte, copiez simplement le code ci-dessous et collez-le dans la
static void Main(string[] args)
méthode, j'espère que vous pouvez comprendrela source
Les méthodes Parse () fournissent les styles de nombres qui ne peuvent pas être utilisés pour Convert (). Par exemple:
analyserait les nombres avec un signe de fin pour que i == -123
Le signe de fin soit populaire dans les systèmes ERP.
la source