Partager via


Propriété System.Exception.Data

Cet article fournit des remarques supplémentaires à la documentation de référence de cette API.

Utilisez l’objet System.Collections.IDictionary retourné par la Data propriété pour stocker et récupérer des informations supplémentaires pertinentes pour l’exception. Les informations sont sous la forme d’un nombre arbitraire de paires clé/valeur définies par l’utilisateur. Le composant clé de chaque paire clé/valeur est généralement une chaîne d’identification, tandis que le composant valeur de la paire peut être n’importe quel type d’objet.

Sécurité de paire clé/valeur

Les paires clé/valeur stockées dans la collection retournée par la Data propriété ne sont pas sécurisées. Si votre application appelle une série imbriquée de routines et que chaque routine contient des gestionnaires d’exceptions, la pile d’appels résultante contient une hiérarchie de ces gestionnaires d’exceptions. Si une routine de niveau inférieur lève une exception, tout gestionnaire d’exceptions de niveau supérieur dans la hiérarchie de pile des appels peut lire et/ou modifier les paires clé/valeur stockées dans la collection par tout autre gestionnaire d’exceptions. Cela signifie que vous devez garantir que les informations des paires clé/valeur ne sont pas confidentielles et que votre application fonctionnera correctement si les informations contenues dans les paires clé/valeur sont endommagées.

Conflits majeurs

Un conflit de clé se produit lorsque différents gestionnaires d’exceptions spécifient la même clé pour accéder à une paire clé/valeur. Utilisez la prudence lors du développement de votre application, car la conséquence d’un conflit clé est que les gestionnaires d’exceptions de niveau inférieur peuvent communiquer par inadvertance avec des gestionnaires d’exceptions de niveau supérieur, et cette communication peut entraîner des erreurs de programme subtiles. Toutefois, si vous êtes prudent, vous pouvez utiliser des conflits de clés pour améliorer votre application.

Éviter les conflits de clés

Évitez les conflits de clés en adoptant une convention d’affectation de noms pour générer des clés uniques pour les paires clé/valeur. Par exemple, une convention de nommage peut générer une clé composée du nom de votre application délimité par un point, de la méthode qui fournit des informations supplémentaires pour la paire, et d'un identificateur unique.

Supposons que deux applications, nommées Produits et Fournisseurs, ont chacune une méthode nommée Sales. La méthode Sales dans l’application Products fournit le numéro d’identification (unité de conservation des stocks ou référence SKU) d’un produit. La méthode Sales dans l’application Fournisseurs fournit le numéro d’identification ou le SID d’un fournisseur. Par conséquent, la convention d’affectation de noms pour cet exemple génère les clés , « Products.Sales.SKU » et « Suppliers.Sales.SID ».

Exploiter les principaux conflits

Tirez parti des conflits entre clés en utilisant la présence d'une ou de plusieurs clés spéciales et préconfigurées pour contrôler le traitement. Supposons que, dans un scénario, le gestionnaire d’exceptions de niveau le plus élevé dans la hiérarchie de pile d’appels intercepte toutes les exceptions levées par des gestionnaires d’exceptions de niveau inférieur. Si une paire clé/valeur avec une clé spéciale existe, le gestionnaire d’exceptions de haut niveau met en forme les paires clé/valeur restantes dans l’objet IDictionary de manière non standard ; sinon, les paires clé/valeur restantes sont mises en forme de manière normale.

Supposons maintenant que, dans un autre scénario, le gestionnaire d’exceptions à chaque niveau de la hiérarchie de pile d’appels intercepte l’exception levée par le gestionnaire d’exceptions de niveau inférieur suivant. En outre, chaque gestionnaire d’exceptions connaît la collection retournée par la Data propriété contient un ensemble de paires clé/valeur accessibles avec un ensemble préarrangé de clés.

Chaque gestionnaire d’exceptions utilise l’ensemble préarrangé de clés pour mettre à jour le composant valeur de la paire clé/valeur correspondante avec des informations propres à ce gestionnaire d’exceptions. Une fois le processus de mise à jour terminé, le gestionnaire d’exceptions lève l’exception au gestionnaire d’exceptions de niveau supérieur suivant. Enfin, le gestionnaire d’exceptions de niveau supérieur accède aux paires clé/valeur et affiche les informations de mise à jour consolidées de tous les gestionnaires d’exceptions de niveau inférieur.