Utilizzo di eccezioni filtrate dall'utente

Attualmente in Visual Basic e nelle estensioni gestite per C++ sono supportate le eccezioni filtrate dall'utente. I gestori eccezioni filtrati dall'utente intercettano e gestiscono le eccezioni in base a requisiti definiti dall'utente per le singole eccezioni. Questi gestori utilizzano il blocco Try/Except nelle estensioni gestite per C++ o l'istruzione Catch con la parola chiave When in Visual Basic.

Questa tecnica è utile quando un particolare oggetto eccezione corrisponde a più errori. In questo caso l'oggetto presenta in genere una proprietà che contiene il codice di errore specifico associato all'errore. È possibile utilizzare la proprietà del codice di errore nell'espressione per selezionare solo l'errore particolare che si desidera gestire in tale clausola Catch.

Nell'esempio di Visual Basic che segue viene illustrata l'istruzione Catch/When.

Try
      'Try statements.
   Catch When Err = VBErr_ClassLoadException
      'Catch statements.
End Try

Nell'esempio delle estensioni gestite per C++ riportato di seguito viene illustrata l'istruzione Try/Except.

int main(int argc, char **argv)
{
    __try {
        RunFunction(argc, argv);
    } __except(CheckForError()) {
        ReportErrorToUser();
    }
    return 0;
}

L'espressione della clausola filtrata dall'utente non è sottoposta ad alcuna restrizione. Se si verifica un'eccezione durante l'esecuzione dell'espressione filtrata dall'utente, tale eccezione sostituirà l'eccezione corrente. In questo caso in Common Language Runtime viene interrotta la ricerca di un gestore per l'eccezione corrente, viene eseguito il blocco finally del costrutto try e all'esterno del costrutto try corrente viene avviata la ricerca di un gestore per la nuova eccezione.

Combinazione di un'eccezione specifica e di clausole filtrate dall'utente

Un'istruzione catch può contenere sia l'eccezione specifica che le clausole filtrate dall'utente. Nel runtime viene prima eseguito il test dell'eccezione specifica. Se l'eccezione specifica ha esito positivo, verrà eseguito il filtro dell'utente. Il filtro generico può contenere un riferimento alla variabile dichiarata nel filtro della classe. Si noti che non è possibile invertire l'ordine delle due clausole di filtro.

Nell'esempio di Visual Basic che segue vengono illustrate l'eccezione specifica ClassLoadException nell'istruzione Catch e la clausola filtrata dall'utente contenente la parola chiave When.

Try
      'Try statements.
   Catch cle As ClassLoadException When cle.IsRecoverable()
      'Catch statements.
End Try

Vedere anche

Utilizzo del blocco try/catch per l'intercettazione delle eccezioni | Utilizzo di eccezioni specifiche in un blocco catch | Suggerimenti per gestire le eccezioni | Nozioni fondamentali sulla gestione delle eccezioni