Try-fogás (hivatkozás c #), a Microsoft docs

try-catch utasítást áll try blokk. majd egy vagy több javaslatot fogás. meghatározó rakodók különböző kivételek.

jegyzetek

Amikor egy kivétel van a Common Language Runtime (CLR) keres fogási nyilatkozatot. amely kezeli ezt a kivételt. Ha az aktuálisan futó módszer nem tartalmaz blokk fogás. A CLR megkeresi a módszer, amely az úgynevezett jelenlegi módszer, és így tovább, egészen a hívás verem. Ha a catch blokk nem található, akkor a CLR üzenet jelenik meg a felhasználó nem kezelt kivétel, és leállítja a program végrehajtásához.

try egység tartalmaz egy biztonsági kódot, amely okozhat kivételt. Ez a blokk kerül végrehajtásra, amíg kivétel történik, vagy addig, amíg sikeresen befejeződött. Például, a következő kísérlet, hogy a null objektumot emel kivételt NullReferenceException.

Bár a fogás záradék nélkül is használható érveket fogni bármilyen kivétel, ilyen használata nem ajánlott. Általában meg kell fogni csak azok kivételek, ha tudod, hogyan kell elvégezni a helyreállítást. Ezért mindig adja meg a tárgy érv származó Kivétel. például:

Egy try-catch blokk, akkor néhány konkrét fogás záradékokat. Ebben az esetben a sorrend nagyon fontos fogás záradékokat. mert a fogási kikötések céljából ellenőrizni. Elfogják több egyedi kivételek előtt kevésbé specifikus. A fordító hibát generál, ha kapunk blokkok elhelyezve oly módon, hogy az azt követő blokk soha nem lehet elérni.

Segítségével érvek fogás az egyik módja a szűrés kivételt kell feldolgozni. Ön is használja az állítmány kifejezés, ami tovább igazolja a kivétel, annak érdekében, hogy eldönteni, hogy kezelje. Ha az állítmány kifejezés visszatérési hamis, a keresési kezelőt folytatódik.

Szűrők kivételek előnyösen lehallgatott és visszahívási (alább), mivel a szűrő verem érintetlen marad. Ha egy következő felvezető kioldja a verem, akkor láthatjuk, ahol eredetileg volt egy kivétel, nem csak az utolsó hely, ahol meg újra hívott. Általában kivétel szűrőkifejezésnek használt fakitermelés. Létrehozhat egy állítmány funkció, amely mindig visszatér hamis, és azt is rögzíti a kimenet a napló, hogy jelentkezzen kivételek a naplóban, amint elérhetővé válnak anélkül, hogy a feldolgozás és újra hívást.

dobás nyilatkozatot. szerepel a catch blokkban. lehetővé teszi, hogy újra fel egy kivétel, elfogott egység fogás. A következő példa információkat gyűjt a forrása IOException kivétel. akkor ez a kivétel a szülő módszer.

Meg lehet fogni egy kivétel, ami a másik kivétel. Ez jelzi, hogy utolérjék kivételek belső, amint az az alábbi példában.

Azt is újra fel kivételt, ha a meghatározott feltétel, amint az az alábbi példában.

A try blokkban, inicializálni csak azokat a változókat, amelyek deklarált benne. Ellenkező esetben, befejezéséig a blokk kivétel következhet be. Például, a következő példában, az n változó inicializálva kódot próbát blokkokat. Kísérlet arra, hogy használja ezt a változót kívül a try blokk a Write utasítás (n) fog eredményezni fordító hibát.

További információ a kivételeket lásd a lehallgatás. Lásd try-catch-végre.

Kivételek aszinkron Módszerek

Aszinkron jelölt módszer módosító aszinkron, és jellemzően egy vagy több kifejezést, vagy megvárni utasításokat. Expression várják várják kezelő alkalmazza a feladat vagy feladat.

Elvégzett feladatok amelyhez alkalmazni várják. Ez lehet egy bukott állam, mert a kezeletlen kivétel egy módszer, amely visszaadja ezt a feladatot. Várakozás feladat kivételt dob. A feladat is ki lehet tölteni a megszüntetett állami törlésre kerül, ha egy aszinkron folyamat, amely visszaadja a feladatot. Várakozás egy törölt feladatunk OperationCanceledException. További információ arról, hogyan lehet törölni egy aszinkron folyamat, lásd. A részben finomhangolás aszinkron alkalmazások (C # és Visual Basic).

Hogy elfogják kivételek számíthat a feladat egy try blokkban, és elkapja, a megfelelő catch blokkban. Lásd. Lásd a példát a „példa”.

A feladat lehet egy bukott állam, ha a várható aszinkron módszerek van néhány kivétel. Például, a feladat lehet az eredménye, amelyben Task.WhenAll módszer. Várva egy ilyen feladat fogott egyetlen kivétel, és lehetetlen megjósolni, hogy a kivétel lesz fogott. Lásd. Lásd a példát a „példa”.

A következő példa try blokk egy hívás ProcessString módszer. ami okozhat kivételt. Catch kikötés tartalmaz egy kivételt kezelőt, amely egyszerűen egy üzenet jelenik meg a képernyőn. Ha a dobás nyilatkozatot hívjuk MyMethod. a rendszer megkeresi fogás operátor és egy üzenetet jelenít meg Kivétel fogott.

A következő példában két fogás blokkok és elfogja a legtöbb egyedi kivétel, megérkezett az első.

Hogy elkapjam a legkevésbé specifikus kivétel, akkor cserélje ki a dobás nyilatkozatot ProcessString következő nyilatkozatot: dobja új kivétel ().

Ha ebben a példában, az első, hogy egy catch blokkot, hogy utolérjék a legkevésbé specifikus kivételek, akkor a következő hibaüzenet jelenik meg: Egy korábbi fogás záradék már fogások minden kivételek e, vagy egy szuper típus ( "System.Exception).

A következő példa szemlélteti kivétel kezelési aszinkron módszerek. Hogy elfogják kivételek okozta aszinkron feladat, tegye várják kifejezést a try blokk és elfogják ezt a kivételt a catch blokkban.

A következő példa szemlélteti kivételkezelés, amikor a feladatok száma vezethet számos kivételt. próbálja egység várakozik a feladat, hogy vissza hívja Task.WhenAll. Ez a feladat befejezése után a befejezése a három célkitűzés, amelyre a WhenAll.

Mind a három feladat kivételt dob. catch blokk végigmegy kivételeket észlelnek az ingatlan Exception.InnerExceptions feladatot adta vissza Task.WhenAll.

C # Language Specification

További információért lásd. C # nyelv specifikációt. Leírás nyelv a végleges információforrás a szintaxis és használata a C # nyelvet.