J'ai vu des développeurs utiliser l'instruction return dans un bloc catch. Pourquoi/quand serait-ce une technique utile à employer?Instructions de retour dans des blocs catch
EDIT: J'ai simplement vu le mot-clé return utilisé.
Merci
J'ai vu des développeurs utiliser l'instruction return dans un bloc catch. Pourquoi/quand serait-ce une technique utile à employer?Instructions de retour dans des blocs catch
EDIT: J'ai simplement vu le mot-clé return utilisé.
Merci
public void function() {
try
{
//some code here
}
catch
{
return;
}
}
lorsque le retour; est frappé, le flux d'exécution saute hors de la fonction. Cela ne peut être fait que sur des méthodes void.
EDIT: vous faites ceci si vous ne voulez pas exécuter le reste de la fonction.Par exemple si vous faites un IO de fichier et qu'une erreur de lecture se produit, vous ne voulez pas exécuter de code qui gère le traitement des données dans ce fichier puisque vous ne l'avez pas.
Il y a des occasions où vous ne se soucient pas de l'exception levée, seulement que l'opération Try a échoué. Un exemple serait les fonctions TryParse qui code pseduo ressemblent:
try
{
//attempt conversion
return true;
}
catch
{
return false;
}
Ce serait utile si vous savez ce que la valeur de retour de la fonction doit être dans le bloc catch.
Exemple:
public bool IsDatabaseAvailable() {
try {
// connect
return true;
}
catch (Exception) {
return false;
}
finally {
// clean up
}
}
Vous pouvez attraper l'erreur, connectez-vous et dire retourner une valeur de faux qui indique si la fonction a réussi. Dans d'autres situations, vous voudrez peut-être retourner des données qui ont été calculées dans le bloc try
Une méthode dans .Net Framework lance une exception quand elle n'a pas le bon format.
Un bon exemple est le int.TryParse(object value)
si votre valeur est "10s" ça va Trow une exception. Dans ce cas, nous savons que c'est à cause d'une conversion invalide.
Alors
try
{
int.TryParse(value);
return true;
}
catch { return false; }
Peut-être une fonction qui nous dira si la chaîne est un interger valide. Si vous utilisez ce formulaire pour cette question, ne faites pas de catch (Exception ex) car cela forcerait le .Net à sérialiser l'erreur à l'intérieur de l'objet, ce qui est plutôt lent.
Il est également important de se rappeler que même si vous utilisez le retour dans le bloc try catch, il exécutera toujours le bloc finally.
Donc si votre code cleaup est à l'intérieur, ne vous inquiétez pas, le framework s'assurera de l'appeler.
Mes 2 cents. N.
Je pense que vous voulez dire' int.Parse', qui jette un format invalide, 'int.TryParse' ne lance jamais, retourne un' bool' indiquant un succès d'analyse, et prend un deuxième argument 'out int'. –
Toute situation où vous avez une alternative si la tentative échoue. Un exemple pourrait être vérifier si file
est disponible pour certains operation
bool IsComplete = false;
try
{
// FileStream currentWriteableFile =
File.OpenWrite(sFileLocation);
}
catch(Exception)
{
return false;
}
En fait, je viens de voir le mot-clé return utilisé. – dotnetdev
@dotnetdev: Par opposition à quoi? J'utilise le mot-clé return. – recursive
Désolé je voulais dire "signifié" (je voulais juste dire le mot-clé de retour ... utilisé ") – dotnetdev