Question stupide sur le try finally
-
dimanche 8 avril 2012 12:46
Bonjour,
J'avais un fonctionnement bizarre sur un programme à cause d'une exception et du coup j'ai commencé à me poser des questions sur le méchanisme d'exceptions.
J'essaye donc le code ci-dessous :
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { int i = 123; string s = "Some string"; object o = s; try { // Invalid conversion; o contains a string not an int i = (int)o; } finally { Console.Write("i = {0}", i); } System.Diagnostics.Debug.WriteLine("fsdfsdf"); } } }
Et quand je lance ca me sort une exception et a chaque fois que je clique sur F5 ca m'affiche le message suivant
Une exception de première chance de type 'System.InvalidCastException' s'est produite dans ConsoleApplication2.exeet je ne passe jamais dans le finally. Est ce normal ?
Toutes les réponses
-
dimanche 8 avril 2012 14:20Oui, en mode debug, dans VS, il s'arrête sur toute les execeptions, mais vous pouvez continuer en faisant F5 de nouveau et il passera dans le finally
Richard Clark
Consultant - Formateur .NET
http://www.c2i.fr
Depuis 1996: le 1er site .NET francophone -
dimanche 8 avril 2012 14:36
Et bien justement non. A chaque fois que j'appuie sur F5 il reste bloqué sur la même exception et je ne passe jamais dans le finally.
Je n'ai jamais eu ça d'ou ma question. -
dimanche 8 avril 2012 14:48
Bonjour vincent,
Il manque le catch dans ton Try Finally
using System; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { int i = 123; string s = "some string"; object o = s; try { // Invalid conversion; o contains a string not an int i = (int)o; } catch(Exception e ) { Console.WriteLine(e.Message); } finally { Console.Write("i = {0}", i); } System.Diagnostics.Debug.WriteLine("fsdfsdf"); Console.ReadKey(); } } }
fred on youTube
PHP MySQL Web Site Creator
fred
-
dimanche 8 avril 2012 15:02
moi je veux bien qu'il manque un catch mais du coup pourquoi on a ca alors :
http://msdn.microsoft.com/fr-fr/library/zwc8s4fz(v=vs.80).aspx
-
lundi 9 avril 2012 07:52
Oops, désolé, faut que je lise correctement ;-).
Je pense qu'un meilleur code serait de ce style :
static void Main(string[] args) { try { Method("coucou"); } catch (Exception ex) { Console.WriteLine("dans le catch"); throw; } Console.ReadLine(); } private static void Method(object o) { int i = 123; try { Console.WriteLine("avant erreur"); i = (int)o; } finally { Console.WriteLine("dans le finally"); } }Richard Clark
Consultant - Formateur .NET
http://www.c2i.fr
Depuis 1996: le 1er site .NET francophone -
lundi 9 avril 2012 07:57
Maintenant, dans votre exemple, exécutez le code en mode sans déboguage (Ctrl+F5) et quand la fenêtre d'erreur apparait, appuyez sur Annuler, vous verrez qu'avant de se terminer, l'appli exécute bien le code du finally.Richard Clark
Consultant - Formateur .NET
http://www.c2i.fr
Depuis 1996: le 1er site .NET francophone- Proposé comme réponse Ould MouradEditor mardi 10 avril 2012 14:17
- Marqué comme réponse Ciprian DuduialaOwner jeudi 12 avril 2012 07:15
-
mardi 10 avril 2012 08:59Auteur de réponse
Bonjour,
Je ne voie pas comment pouvez vous ne pas passer dans le finally, pour en avoir la certitude placez y une instruction Cosole.ReadKey pour faire une pause :
finally { Console.Write("i = {0}", i); Console.ReadKey(); }Comme l'exception n'est pas catchée vous n'avez pas le temps de voir que l'instruction Console.Write a été exécutée
Cordialement.
- Marqué comme réponse Ciprian DuduialaOwner jeudi 12 avril 2012 07:15
-
mardi 10 avril 2012 09:18
Bonjour Vincent,
C'est pour cela qu'il y a une rubrique Suggestions dans les articles MSDN afin de corriger des erreurs
http://msdn.microsoft.com/fr-fr/library/zwc8s4fz(v=vs.80).aspx
- Marqué comme réponse Ciprian DuduialaOwner jeudi 12 avril 2012 07:15

