2 votes

Créer une instance de OperationAbortedException

Comment puis-je créer une exception OperationAbortedException ? Ce code ne fonctionne pas :

var ex = new OperationAbortedException("Cannot update event comment");

ERREUR : Impossible d'accéder au constructeur privé 'OperationAbortedException'.

9voto

Christian.K Points 18883

En System.Data.OperationAbortException (je suppose que vous parlez de celle-ci, car vous ne l'avez pas complètement qualifiée dans votre question). n'a pas de constructeur public et est sealed . Cela indique clairement que les concepteurs du cadre de travail ne voulaient pas que vous utilisiez cette exception à vos propres fins. Vraisemblablement, parce que certains rouages internes du framework seraient confus si vous le faisiez.

Vous devez utiliser une exception différente pour vos besoins. D'après le texte du message que vous avez transmis, les exceptions existantes suivantes me viennent à l'esprit :

Lorsque vous sélectionnez une exception existante dans le cadre .NET, veillez à ne pas la sélectionner uniquement sur la base du nom de la classe. Veillez à lire la page MSDN correspondante pour comprendre l'intention (originale) de l'exception. La documentation correspondante commence toujours par les mots "L'exception qui est lancée ...". Si vous trouvez que ce texte correspond à votre intention, réutilisez l'exception du framework (ou dérivez-la pour un contrôle plus fin lors de la capture de l'exception).

Ou créez votre propre type d'exception, si vous le souhaitez.

2voto

Jodrell Points 14205

Si vous parlez de la System.Data.OperationAbortedException alors non, vous ne pouvez pas construire une instance directement, il n'y a pas de constrtucteur public.

Si vous le voulez vraiment, vous pouvez utiliser la réflexion avec la méthode décrite dans la section cette réponse mais je vous recommande de ne pas le faire. Il s'agirait d'une corruption de la conception du cadre.


Voici le code que vous pourriez utiliser mais, s'il vous plaît, ne le faites pas .

var ctor = typeof(OperationAbortException).GetConstructor(
    BindingFlags.NonPublic|BindingFlags.Instance,
    null, 
    new Type[0], 
    null);
var instance = (OperationAbortException)ctor.Invoke(null);

Vous devrez déterminer quel constructeur privé utiliser, s'il y en a plus d'un, et quelles propriétés doivent être définies à quoi. Il n'y a aucune garantie que ce comportement perdure dans les versions ultérieures du framework.

1voto

Sjoerd Points 34671

Ce n'est pas possible. OperationAbortedException a un constructeur privé et une méthode statique interne qui appelle ce constructeur. Il n'est pas possible de créer une nouvelle OperationAbortedException à partir d'un autre assemblage.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X