Question

Quelle est la différence entre Parse () et TryParse ()?

int number = int.Parse(textBoxNumber.Text);

// The Try-Parse Method
int.TryParse(textBoxNumber.Text, out number);

Existe-t-il une forme de vérification d'erreur similaire à un bloc Try-Catch?

Était-ce utile?

La solution

Parse lève une exception s'il ne peut pas analyser la valeur, alors que TryParse renvoie un bool indiquant si l'opération a réussi.

TryParse ne se contente pas de essayer / catch en interne - son but principal est qu'il soit implémenté sans exception, pour une rapidité d'exécution . En fait, la méthode la plus probable est implémentée: en interne, la méthode Parse appelle TryParse , puis lève une exception si elle renvoie false .

En un mot, utilisez Parse si vous êtes sûr que la valeur sera valide. sinon, utilisez TryParse .

Autres conseils

Si la chaîne ne peut pas être convertie en un entier, alors

  • int.Parse () lève une exception
  • int.TryParse () renverra false (mais ne lèvera pas d'exception)

La méthode TryParse vous permet de vérifier si quelque chose est analysable. Si vous essayez d’analyser comme dans la première instance avec un int invalide, vous obtiendrez une exception tandis que dans TryParse, il retournera un booléen vous permettant de savoir si l’analyse a réussi ou non.

Comme note de bas de page, le passage à null dans la plupart des méthodes TryParse lève une exception.

TryParse et la taxe d'exception

Parse lève une exception si la conversion d'une chaîne en type de données spécifié échoue, alors que TryParse évite explicitement de lancer une exception.

TryParse ne renvoie pas la valeur, il renvoie un code d'état indiquant si l'analyse a réussi (et ne génère pas d'exception).

Pour mémoire, je teste deux codes: essayez simplement de convertir une chaîne en un nombre et, en cas d'échec, affectez un nombre à zéro.

        if (!Int32.TryParse(txt,out tmpint)) {
            tmpint = 0;
        }

et:

        try {
            tmpint = Convert.ToInt32(txt);
        } catch (Exception) {
            tmpint = 0;
        }

Pour c #, la meilleure option consiste à utiliser la méthode tryparse, car l'option try & Catch est renvoyée à une exception

.
A first chance exception of type 'System.FormatException' occurred in mscorlib.dll

Qu'il soit douloureux, lent et indésirable, cependant, le code ne s'arrête pas sauf si l'exception de Debug est réglée pour s'arrêter avec.

Je sais que c'est un très vieux billet mais j'ai pensé partager quelques détails supplémentaires sur Parse vs TryParse.

J'ai eu un scénario où DateTime doit être converti en String et si datevalue null ou string.empty, nous faisions face à une exception. Afin de remédier à cela, nous avons remplacé Parse par TryParse et obtiendrons une date par défaut.

Ancien code:

dTest[i].StartDate = DateTime.Parse(StartDate).ToString("MM/dd/yyyy");
dTest[i].EndDate = DateTime.Parse(EndDate).ToString("MM/dd/yyyy");

Nouveau code:

DateTime startDate = default(DateTime);
DateTime endDate=default(DateTime);
DateTime.TryParse(dPolicyPaidHistories[i].StartDate, out startDate);
DateTime.TryParse(dPolicyPaidHistories[i].EndDate, out endDate);

Il faut déclarer une autre variable et l'utiliser comme Out pour TryParse.

double.Parse ("-"); soulève une exception, alors que double.TryParse ("-", sur analysé); analyse jusqu'à 0 Je suppose donc que TryParse effectue des conversions plus complexes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top