2016-04-08 15 views
0

So komplett neu zu Err Handling, aber versuchen zu verstehen.C# Fehlerbehandlung in einer Reihe von Aufrufen

Für einen Prozess, ich habe dies:

try 
{ 
    myGetDataFunction(); 
}catch(SqlException ex){ 
    myLogExceptionRoutine(); 
}catch{ 
    throw; 
} 

Mein nächster Schritt ist Situation zu suchen, wo ich mehrere aufeinanderfolgende Anrufe haben. Zum Beispiel

public void foo(){ 
    callA(); 
    callB(); 
} 

Ich möchte nicht CallB aufgerufen werden, wenn CallA fehlschlägt. Frage ist, wickle ich einfach beide A & B in einem einzigen Versuch/fangen, oder mache ich einen separaten Versuch/catch für jeden? .. und damit versuche ich das 'warum' zu verstehen.

Also so?

try{ 
    callA(); 
    callB(); 
}catch{ 
    // handling stuff 
} 

oder wie dieser bizarre Pseudo-Code, der einfach nicht "richtig" aussieht?

try{ 
    callA(); 
}catch{ 
    // handle error 
} 
if(somevalidityCheck){ 
    try{ 
     callB(); 
    }catch{ 
     // handle error 
    } 
} 
+0

Sie brauchen nicht den 'catch {throw:}'. – juharr

+0

Sie müssen nur callA() und callB() in einem einzigen Versuch setzen. Wenn A fehlgeschlagen ist, wird B nicht –

Antwort

1

Wenn eine Ausnahme auftritt, innerhalb eines try der Rest des Blocks try blockieren, damit Ihr Code übersprungen

try 
{ 
    callA(); 
    callB(); 
} 
catch{} 

nicht callB ausführen, wenn callA eine Ausnahme auslöst. Der einzige Grund, dies in zwei Blöcke von try-catch aufzuteilen, wäre, wenn Sie die Ausnahmen anders handhaben müssten. In diesem Fall können Sie die Blöcke verschachteln, um das Verhalten von callB zu übergehen, wenn callA ausgelöst wird.

try 
{ 
    callA(); 
    try 
    { 
     callB(); 
    } 
    catch 
    { 
     Debug.Log("callB raised exception"); 
    } 
} 
catch 
{ 
    Debug.Log("callA raised exception and callB was not executed"); 
} 
+0

aufgerufen. Vielen Dank. Es ist immer gut zu wissen, wenn etwas nicht nur funktioniert, sondern auch der richtige Weg ist. – Esby

1

Zuerst schreiben Sie es in C# Standard Klammern mit der {} auf neue Zeilen von selbst. :) Kein Java hier !!

Ihr Beispiel ist eine perfekt akzeptierbare Möglichkeit, Ihre Ausnahmen zu schreiben, vorausgesetzt, Sie können tun, was Sie wollen.

try 
{ 
    callA(); 
    callB(); 
} 
catch 
{ 
    // Handle A or B exception. Do you need to know specific details about what A or B is doing? 
} 

Wenn Sie weitere Informationen über die Ausnahme für die Anmeldung benötigen, dann kann es nützlich sein, die Ausnahme in CALLA oder B zu fangen, melden Sie die notwendigen Details und dann die Ausnahme werfen.

Code würde sehr schnell sehr unordentlich werden, wenn jeder jede Methode in einem Versuch/Fangen verpackt.

Verwandte Themen