Proprietà System.Exception.Data

Questo articolo fornisce osservazioni supplementari alla documentazione di riferimento per questa API.

Utilizzare l'oggetto System.Collections.IDictionary restituito dalla Data proprietà per archiviare e recuperare informazioni supplementari rilevanti per l'eccezione. Le informazioni sono sotto forma di un numero arbitrario di coppie chiave/valore definite dall'utente. Il componente chiave di ogni coppia chiave/valore è in genere una stringa di identificazione, mentre il componente valore della coppia può essere qualsiasi tipo di oggetto.

Sicurezza della coppia chiave/valore

Le coppie chiave/valore archiviate nella raccolta restituita dalla Data proprietà non sono sicure. Se l'applicazione chiama una serie nidificata di routine e ogni routine contiene gestori di eccezioni, lo stack di chiamate risultante contiene una gerarchia di tali gestori eccezioni. Se una routine di livello inferiore genera un'eccezione, qualsiasi gestore di eccezioni di livello superiore nella gerarchia dello stack di chiamate può leggere e/o modificare le coppie chiave/valore archiviate nella raccolta da qualsiasi altro gestore eccezioni. Ciò significa che è necessario garantire che le informazioni nelle coppie chiave/valore non siano riservate e che l'applicazione funzioni correttamente se le informazioni nelle coppie chiave/valore sono danneggiate.

Conflitti di chiave

Si verifica un conflitto di chiavi quando gestori di eccezioni diversi specificano la stessa chiave per accedere a una coppia chiave/valore. Prestare attenzione quando si sviluppa l'applicazione perché la conseguenza di un conflitto di chiavi è che i gestori di eccezioni di livello inferiore possono comunicare inavvertitamente con gestori di eccezioni di livello superiore e questa comunicazione potrebbe causare errori di programma sottili. Tuttavia, se si è cauti, è possibile usare i conflitti chiave per migliorare l'applicazione.

Evitare conflitti di chiave

Evitare conflitti di chiave adottando una convenzione di denominazione per generare chiavi univoce per coppie chiave/valore. Ad esempio, una convenzione di denominazione potrebbe produrre una chiave costituita dal nome delimitato da punti dell'applicazione, dal metodo che fornisce informazioni supplementari per la coppia e da un identificatore univoco.

Si supponga che due applicazioni, denominate Products e Suppliers, ognuna abbia un metodo denominato Sales. Il metodo Sales nell'applicazione Products fornisce il numero di identificazione (unità di magazzino o SKU) di un prodotto. Il metodo Sales nell'applicazione Suppliers fornisce il numero di identificazione, o SID, di un fornitore. Di conseguenza, la convenzione di denominazione per questo esempio restituisce le chiavi "Products.Sales.SKU" e "Suppliers.Sales.SID".

Conflitti di chiavi di exploit

Exploit key conflicts by using the presence of one or more special, prearranged keys to control processing. Si supponga che, in uno scenario, il gestore di eccezioni di livello più alto nella gerarchia dello stack di chiamate intercetta tutte le eccezioni generate dai gestori di eccezioni di livello inferiore. Se esiste una coppia chiave/valore con una chiave speciale, il gestore eccezioni di alto livello formatta le coppie chiave/valore rimanenti nell'oggetto IDictionary in modo non standard. In caso contrario, le coppie chiave/valore rimanenti vengono formattate in modo normale.

Si supponga ora che, in un altro scenario, il gestore eccezioni a ogni livello della gerarchia dello stack di chiamate intercetta l'eccezione generata dal gestore eccezioni di livello inferiore successivo. Inoltre, ogni gestore eccezioni conosce la raccolta restituita dalla Data proprietà contiene un set di coppie chiave/valore a cui è possibile accedere con un set di chiavi prearrangato.

Ogni gestore eccezioni usa il set prearranged di chiavi per aggiornare il componente valore della coppia chiave/valore corrispondente con informazioni univoche per tale gestore eccezioni. Al termine del processo di aggiornamento, il gestore eccezioni genera l'eccezione al gestore di eccezioni di livello superiore successivo. Infine, il gestore eccezioni di livello più alto accede alle coppie chiave/valore e visualizza le informazioni di aggiornamento consolidato da tutti i gestori eccezioni di livello inferiore.