web-dev-qa-db-fra.com

Int32.TryParse () renvoie zéro en cas d'échec - succès ou échec?

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

Lorsque cette méthode est renvoyée, contient la valeur entière signée sur 32 bits équivalente au nombre contenu dans s, si la conversion a réussi, ou à zéro si 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"? Donc, la TryParse retournera zéro. Comment savoir si c'est un succès ou un échec?

25
NLV

Non, TryParse renvoie true ou false pour indiquer le succès. La valeur du paramètre out est utilisée pour la valeur analysée, ou 0 en cas d'échec. Alors:

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 "0", il exécutera le premier bloc, alors que si vous transmettez "mauvais numéro", il exécutera le deuxième bloc.

55
Jon Skeet

La méthode retourne un booléen indiquant le succès ou l'échec. Utiliser ça. L'entier est un paramètre de référence transmis à la méthode et n'a rien à voir avec la valeur de retour de la méthode.

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

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

Donc, pour vérifier le succès ou l'échec, procédez comme suit:

int value;

if (Int32.TryParse("0", out value))
    Console.WriteLine("Parsed as " + value);
else
    Console.WriteLine("Could not parse");
5
BoltClock

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
edze

La méthode Int32.TryParse() renvoie une valeur boolean en tant que valeur renvoyée et fournit la valeur convertie en tant que paramètre out. Vous pouvez donc vérifier la valeur de retour boolean pour le statut.

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
Kangkan

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

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