Juste pour ma clarification:
Puis-je jeter les exceptions de plainte CLS-plainte et non-CLS dans .NET Framework? .Je suis en train d'utiliser C # 3.0. P>
Quand j'atteindra une exception p >
catch(Exception ex) { }
3 Réponses :
RunTimewrapaSexception code>, qui dérive de exception code>. li>.
-
Vous ne jetez pas un runtimewrapaSexception code>, le CLR fait. MSDN a une description détaillée que je cite ici: p>
certaines langues, telles que C ++, vous permettent de lancer des exceptions de tout type géré. D'autres langues, telles que Microsoft C # et Visual Basic, exigent que chaque exception projetée soit dérivée de la classe d'exception. Pour maintenir la compatibilité entre les langues, les objets d'exécution de la langue commune (CLR) sont des objets qui ne découlent pas d'exception dans un objet RunTimewrapeExceptionException. EM> P> LI>
Si vous souhaitez traiter des exceptions CLS et non-CLS différemment, attrapez-les dans le bon ordre: P>
try {
// some code
catch(RuntimeWrappedException ex) {
// non-CLS exceptions
catch(Exception ex) {
// CLS exceptions
}
Bien que le compilateur C # permet aux développeurs de jeter des objets dérivés d'exception, avant de
C # Version 2.0, le compilateur C # a permis aux développeurs d'attraper des exceptions non conformes à la CLS.
En utilisant le code comme celui-ci:
Le CLS le permet mais toutes les langues ne font pas. Il peut être fait avec C ++ / CLI mais il ne peut pas avec c #, vb.net. P>
À partir de .NET Framework 2.0, toutes les exceptions non CLS sont enveloppées à l'intérieur d'un RUNTIMEWRAPEDEXCEPTION . P>
Étant donné que RunTimewrapaPrappedException découle de l'exception, une prise (exception) attrapera des exceptions non CLS. P>
à partir d'une analyse RUNTIMEWRAPEFEXEXException Vous pouvez accéder à l'exception originale via RuntiMewrapaStionException.wravedException Propriété. P>