Redéfinition de mon exception

Résolu
cs_BackPack Messages postés 20 Date d'inscription jeudi 8 janvier 2004 Statut Membre Dernière intervention 20 mars 2007 - 9 mars 2007 à 18:03
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 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.

@ +

Backpack

7 réponses

Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
9 mars 2007 à 18:40
On peut jouer avec la reflexion.. mais bon..

try
{
    throw new ThreadStateException( " ... " );
}
catch ( Exception ex )
{
    Exception newEx = ( Exception )Activator.CreateInstance
    (
        ex.GetType( ),
        " ... " + ex.Message
    );


    throw newEx;
}
3
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
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 );
}
0
cs_Nurgle Messages postés 1642 Date d'inscription samedi 6 novembre 2004 Statut Membre Dernière intervention 28 avril 2011 4
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 :)

Bonne journée,
A++

<hr width="100%" size="2" />Nurgle (Antoine) - MSP
0
cs_Nurgle Messages postés 1642 Date d'inscription samedi 6 novembre 2004 Statut Membre Dernière intervention 28 avril 2011 4
9 mars 2007 à 18:24
arf Lutinore, j'avais pô refresh à temps...

<hr width="100%" size="2" />Nurgle (Antoine) - MSP
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
9 mars 2007 à 18:25
En même temps moi j'ai été trop vite j'avais pô vu qu'il utilisait déja la propriété InnerException .
0
cs_BackPack Messages postés 20 Date d'inscription jeudi 8 janvier 2004 Statut Membre Dernière intervention 20 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 ???

@ +
Backpack
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
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.
0
Rejoignez-nous