Megosztás a következőn keresztül:


Felhasználó által szűrt kivételkezelők használata

A felhasználó által szűrt kivételkezelők a kivételhez megadott követelmények alapján észlelik és kezelik a kivételeket. Ezek a kezelők a catch kulcsszóval (Catchés When a Visual Basicben) együtt használják az when utasítást.

Ez a technika akkor hasznos, ha egy adott kivételobjektum több hibának felel meg. Ebben az esetben az objektum általában rendelkezik egy tulajdonsággal, amely a hibához társított konkrét hibakódot tartalmazza. A kifejezés hibakód tulajdonságával csak a záradékban catch kezelni kívánt hibát választhatja ki.

Az alábbi példa az utasítást szemlélteti 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  

A felhasználó által szűrt záradék kifejezése semmilyen módon nem korlátozott. Ha a felhasználó által szűrt kifejezés végrehajtása során kivétel történik, a rendszer elveti a kivételt, és a szűrőkifejezés hamisnak minősül. Ebben az esetben a közös nyelvi futtatókörnyezet folytatja az aktuális kivétel kezelőjének keresését.

Az adott kivétel és a felhasználó által szűrt záradékok egyesítése

Az catch utasítás az adott kivételt és a felhasználó által szűrt záradékokat is tartalmazhat. A futtatókörnyezet először teszteli az adott kivételt. Ha az adott kivétel sikeres, a futtatókörnyezet végrehajtja a felhasználói szűrőt. Az általános szűrő tartalmazhat az osztályszűrőben deklarált változóra mutató hivatkozást. Vegye figyelembe, hogy a két szűrő záradék sorrendje nem vonható vissza.

Az alábbi példa egy adott kivételt mutat be a fogási utasításban, valamint a felhasználó által szűrt záradékot a when kulcsszó használatával.

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  

Lásd még