Dela via


Använda användarfiltrerade undantagshanterare

Användarfiltrerade undantagshanterare fångar och hanterar undantag baserat på de krav som du definierar för undantaget. Dessa hanterare använder -instruktionen catch med nyckelordet when (Catch och When i Visual Basic).

Den här tekniken är användbar när ett visst undantagsobjekt motsvarar flera fel. I det här fallet har objektet vanligtvis en egenskap som innehåller den specifika felkod som är associerad med felet. Du kan använda egenskapen felkod i uttrycket för att endast välja det specifika fel som du vill hantera i den catch satsen.

Följande exempel illustrerar -instruktionen catch/when .

try
{
    //Try statements.  
}
catch (Exception ex) when (ex.Message.Contains("404"))
{
    //Catch statements.
}
Try  
    'Try statements.  
    Catch When Err = VBErr_ClassLoadException
    'Catch statements.
End Try  

Uttrycket för den användarfiltrerade satsen är inte begränsat på något sätt. Om ett undantag inträffar under körningen av det användarfiltrerade uttrycket ignoreras undantaget och filteruttrycket anses ha utvärderats till falskt. I det här fallet fortsätter den vanliga språkkörningen sökningen efter en hanterare för det aktuella undantaget.

Kombinera det specifika undantaget och de användarfiltrerade satserna

En catch instruktion kan innehålla både det specifika undantaget och de användarfiltrerade satserna. Körningen testar det specifika undantaget först. Om det specifika undantaget lyckas kör körningen användarfiltret. Det generiska filtret kan innehålla en referens till variabeln som deklarerats i klassfiltret. Observera att ordningen på de två filtersatserna inte kan ångras.

I följande exempel visas ett specifikt undantag i catch-instruktionen samt den användarfiltrerade satsen med nyckelordet when.

try
{
    //Try statements.  
}
catch (System.Net.Http.HttpRequestException ex) when (ex.Message.Contains("404"))
{
    //Catch statements.
}
Try  
    'Try statements.
    Catch cle As ClassLoadException When cle.IsRecoverable()  
    'Catch statements.
End Try  

Se även