Używam niestandardowych wyjątków do informowania o charakterze błędu.
Na przykład, lubię używać frameworka "ArgumentNullException" do sprawdzania argumentów. Później, kiedy widzę ten błąd albo w debugerze, albo w dzienniku błędów, od razu znam naturę błędu bez dalszego czytania.
Drugi koniec spektrum to wyjątek InvalidOperationException, który może oznaczać praktycznie wszystko.
Alternatywą dla niestandardowych wyjątków są szczegółowe komunikaty o błędach. Jest to ok, ale tworzenie niestandardowego wyjątku, takiego jak ConnectionFailed, jest bardziej znaczące. Wtedy sama wiadomość może podać więcej szczegółów.
Podczas tworzenia takich niestandardowych wyjątków nie dodaję żadnych nowych właściwości. Powodem tego jest to, że jeśli masz rejestr błędów, chcesz, aby działał na wszystkie wyjątki. Jeśli dodasz specjalną właściwość, rejestrator błędów zignoruje ją. Na przykład, jeśli używasz MSTest, po uruchomieniu testu i nie powiedzie się, właściwości niestandardowe nie są wyświetlane. Ale jeśli pozostaniesz z właściwością Message klasy baseclass, będzie to wyglądało dobrze.
Więc subclassing jest bardzo prosta:
public class NavigationException : Exception{
public NavigationException() {}
public NavigationException(string msg) : base(msg) {}
public NavigationException(string msg, Exception inner) : base(msg, inner) {}
}
To jest bardzo proste, działa z każdym rejestratorem błędów, a kiedy widzę go, wiem, że był to problem nawigacji i mogę wyświetlić szczegóły w razie potrzeby .
Greg
podobne do http://bit.ly/hVTSgp polecam że zawężenia tematu poprzez dalsze wyjaśnienia, co szukasz. –
Mój szef chce, żebym utworzył niestandardową klasę wyjątków dla napisanego przeze mnie programu, abyśmy mogli łatwo zidentyfikować konkretne błędy. Będą to takie rzeczy jak: Brak danych w konkretnej komórce programu Excel, wyjątki poza wyjątkami (mogą używać standardu), dane nie są przesyłane w określonej kolejności itp. –
Wygląda na to, że używasz wyjątków do obsługi przepływów logiki biznesowej - oczekiwanych w miarę możliwości należy rozwiązywać problemy bez stosowania wyjątków. – cjk