web-dev-qa-db-fra.com

Parse v. TryParse

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 semblable à un bloc Try-Catch?

97
Kredns

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

TryParse ne fait pas que try/catch en interne - l’intérêt majeur de cela est qu’elle est mise en œuvre sans exceptions, de sorte qu’elle soit rapide. En fait, la méthode la plus probable est que 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.

138
Greg Beech

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

  • int.Parse() lève une exception
  • int.TryParse() retournera false (mais ne lèvera pas une exception)
20
M4N

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

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

3
Ray Booysen

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 lever une exception.

3
Gulzar Nazim

Pour mémoire, je teste deux codes: essayez simplement de convertir une chaîne en nombre et si cela échoue, affectez le 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 tryparse, car alternative à try & Catch est levée à l'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 y mettre fin.

0
magallanes

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

0
Mark Brittingham

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 chaîne et si datevalue null ou string.empty nous faisions face à une exception. Afin de remédier à cela, nous avons remplacé Parse avec TryParse et nous aurons 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);

Avoir à déclarer une autre variable et utilisé comme Out pour TryParse. 

0
LifeOfPi