Int32.TryParse () retourne zéro à l'échec - succès ou échec?

j'ai lu ceci de msdn à propos de Int32.TryParse()

quand cette méthode retourne, contient le Équivalent d'une valeur entière signée 32 bits au nombre contenu dans s, si la la conversion a réussi, ou zéro si le la conversion a échoué.

mais que se passe-t-il si la chaîne passée elle-même est une représentation de chaîne de '0'. Si le TryParse renvoie zéro. Comment savoir si c'est un succès ou un échec?

24
demandé sur BoltClock 2010-12-29 11:53:16

5 réponses

Non, TryParseretourne vrai ou faux pour indiquer le succès. La valeur de l' est utilisé pour la valeur parsée, ou 0 en cas d'échec. Donc:

int value;
if (Int32.TryParse(someText, out value))
{
    // Parse successful. value can be any integer
}
else
{
    // Parse failed. value will be 0.
}

Donc si vous passez en "0", il exécutera le premier bloc, alors que si vous passez dans le "mauvais numéro", il exécutera le deuxième bloc.

52
répondu Jon Skeet 2010-12-29 09:06:49

la méthode renvoie un booléen indiquant le succès ou l'échec. L'utiliser. L'entier est une référence paramètre passé à la méthode, et n'a rien à voir avec la valeur de retour de la méthode.

Voici le prototype de Int32.TryParse() documentation. Il est très clair qu'il retourne est un booléen. Le deuxième paramètre est un out int ce qui signifie que l'argument est passé par référence, donc il sera muté par le méthode.

public static bool TryParse(
    string s,
    out int result
)

alors pour vérifier le succès ou l'échec, faites ceci:

int value;

if (Int32.TryParse("0", out value))
    Console.WriteLine("Parsed as " + value);
else
    Console.WriteLine("Could not parse");
5
répondu BoltClock 2010-12-29 09:04:24

Int32.TryParse() la méthode renvoie un boolean valeur comme retour et fournit la valeur convertie comme paramètre out. Ainsi, vous pouvez vérifier pour le retour boolean valeur pour l'état.

private static void TryToParse(string value)
   {
      int number;
      bool result = Int32.TryParse(value, out number);
      if (result)
      {
         Console.WriteLine("Converted '{0}' to {1}.", value, number);         
      }
      else
      {
         if (value == null) value = ""; 
         Console.WriteLine("Attempted conversion of '{0}' failed.", value);
      }
   }
2
répondu Kangkan 2010-12-29 09:00:00

TryParse () renvoie un booléen.

        Int32 testInt;

        if (!Int32.TryParse("123", out testInt))
        {
            MessageBox.Show("Is not a Int32!");
            return; // abbrechen
        }

        MessageBox.Show("The parst Int32-value is " + testInt);
2
répondu edze 2010-12-29 09:21:03

en utilisant C# 7 Maintenant vous pouvez déclarer la variable dans le TryParse comme ...

if (Int32.TryParse(someText, out int value))
{
   // Parse successful. value can be any integer
}
else
{
   // Parse failed. value will be 0.
}
0
répondu Ihtsham Minhas 2017-08-17 10:13:09