cs_BackPack
Messages postés20Date d'inscriptionjeudi 8 janvier 2004StatutMembreDernière intervention20 mars 2007
-
9 mars 2007 à 18:03
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 2012
-
9 mars 2007 à 20:04
Bonjour à tous,
J'ai une petite question. Je sais pas si c'est parce que j'ai pas
les yeux en face des trous aujourd'hui mais je n'arrive pas à
faire un truc qui pourtant devrait être relativement simple.
Voici mon problème:
J'aimerais faire le Catch d'une exception puis redéfinir son message
sans perdre son type.
Exemple:
Dans mon code je lève une exception :
throw
new
ThreadStateException
("mon message");
Dans mon code je trappe les exception.
try
}
...
}
Catch(Exception ex)
{
}
C'est là que ça ce gâte....
Dans mon catch si je regarde le type de ex j'obtient ThreadStateException
Si je veux redefinir mon message exemple
Exception NewEx = newException(ex.Message.ToString() + "Suite de mon message" ,ex);
C'est bien mais maitenant, si je regarde le type de NewEx il est maintenant de type Exception
Je compred bien le pourquoi mais j'aiemrais savoir comment ne pas perdre son type.
Ne me repondez pas de faire ThreadStateException NewEx = newThreadStateException(ex.Message.ToString() + "Suite de mon message" ,ex);
Car le but est que je ne connaitrait pas son type avant le catch.
Bref si quelqu'un me comprend merci de bien voulaoir m'aider.
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 9 mars 2007 à 18:19
Salut, une exception ne contient pas seulement un message ( en lecture seule ) , il peut y avoir un HRESULT par exemple ou n'importe qu'elle autre propriété.. le mieux je pense que c'est d'utiliser la propriété InnerException.
try
{
throw new ThreadStateException( " ... " );
}
catch ( Exception ex )
{
// l'exception est placée dans InnerException.
throw new ApplicationException( " ... ", ex );
}
cs_Nurgle
Messages postés1642Date d'inscriptionsamedi 6 novembre 2004StatutMembreDernière intervention28 avril 20114 9 mars 2007 à 18:20
Salut,
Tu ne peux pas modifier l'exception ! Soit :
- tu fais un throw; et elle est renvoyée telle quelle
- ou alors tu crées une deuxième Exception en lui passant la 1ère, comme tu as fait.
Si tu en crées une deuxième, ton exception sera donc de type Exception mais sa propriété InnerException te renverra l'exception originale... ce qui te permet d'avoir ta propre Exception (avec ton message d'erreur, etc...) mais contenant également l'Exception originale :)
cs_BackPack
Messages postés20Date d'inscriptionjeudi 8 janvier 2004StatutMembreDernière intervention20 mars 2007 9 mars 2007 à 19:47
Salut Lutinore et Nurgle,
Tout d'abord un gros merci à vous deux pour
votre aide.
Finalement, Lutinore ta solution avec la réflexion
a résolu mon problème et a fais de moi un homme
heureux HEHE
Je ne connaissais pas Activator et je dois dire que
grâce à toi maintenant je vais lui trouver toute sorte
d'activitée Heu par contre...ce qui me fais peur,
c'est pourquoi tu dit "mais bon..." dans ta réponse.
Dois-je me méfier de quelque chose ???
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 9 mars 2007 à 20:04
Pas vraiment.. mais la reflexion c'est quand même un mécanisme de haut niveau pas forcement très rapide qui "casse" un peu les règles de la programmation orientée objet, j'ai tendance à l'utiliser seulement quand il s'agit de vraiment obtenir des infos sur les types à l'execution.