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?
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
.
Si la chaîne ne peut pas être convertie en un entier, alors
int.Parse()
lève une exceptionint.TryParse()
retournera false (mais ne lèvera pas une exception)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.
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.
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.
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).
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.