Różnica polega na tym, że wydrukuje się Próbowano podzielić przez zero. a drugi wydrukuje Oh NO !!.
Obsługa wyjątków jest problemem złożonym i zależy od zastosowania, ale oto kilka ogólnych uwag:
Generalnie to najlepiej, aby zapewnić teleskopowe dla wyjątkami:
coś takiego:
catch ({System.DivideByZeroException ex)
{
Console.WriteLine("Ops. I cannot divide by zero.");
}
catch ({System.Exception ex)
{
Console.WriteLine("There was an error during calculations: {0}", ex.Message);
}
Wcześniej czy później dowiesz się hat Console.WriteLine
jest po prostu niewystarczająco dobry i będziesz musiał użyć rejestratora najlepiej, aby zacząć go używać wcześniej.
Idealnie, jeśli zdecydujesz się wystawiać surowych komunikatów o błędach do użytkownika, powinno być drukowanie wszystkich wiadomości w łańcuchu wyjątków lub przynajmniej ten, który jest najbardziej głębokie.
Coś jak:
catch ({System.DivideByZeroException ex)
{
Console.WriteLine("Oops. I cannot divide by zero.");
}
catch ({System.Exception ex)
{
Console.WriteLine(GetExceptionMsgs(ex));
}
...in another class...
public static string GetExceptionMsgs(Exception ex) {
if(ex == null) {
return "No exception = no details";
}
var sb = new StringBuilder();
while(ex != null) {
sb.AppendLine(ex.Message);
ex = ex.InnerException;
}
return sb.ToString()
}
Jeżeli nie jesteś zainteresowany tym, co ty połowu wyjątek (info na stosie, wiadomości itp) można po prostu napisać 'catch {Console.WriteLine (" Oh No ");}' – Steve
Różnica polega na tym, że masz * jakiś * pomysł, dlaczego twój program przestanie działać poprawnie w pierwszym fragmencie. Brak w drugim fragmencie. Drugi sposób sprawia, że użytkownicy SO zadają pytania typu "to nie działa, wystąpił błąd". Po prostu nie pisz w ten sposób. –
@Steve Istnieje niewielka różnica między 'catch' i' catch (Exception) '. Pierwszy będzie przechwytywał wszystkie obiekty wyjątku, drugi przechwytuje tylko obiekty wyjątków pochodzące z 'Exception'. W języku C# można tylko rzucać obiektami pochodzącymi od 'Exception', ale CLR obsługuje więcej. – user1908061