2016-08-18 4 views
-1

Я разрабатываю окно приложение в VS2015 Моего запроса относительно два возможных методов обработки определенной системы исключений: - Использование попробовать блоки, где это возможно, и обрабатывать его - Определить класс исключения и записывать все возможные исключения (я фокусирую только определенные системой исключения, такие как File Not Found, Null Reference) и наследует этот класс в других классах, которые автоматически будут обрабатывать исключения. Может ли кто-нибудь посоветовать мне, какой метод лучше, и если второй метод лучше, как его реализовать и использовать. Мои классы уже наследуются от формы. Мне нужен интерфейс? Если да, то где я могу реализовать методы? Любая помощь приветствуется! Спасибо заранее.возможности иметь класс, посвященные обработки исключений в C#

+2

Это было бы очень плохая идея. Обычно исключения требуют специальной обработки. Итак, если вы поймали «NullReferenceException», что бы вы сделали в обработчике? Вы бы не поняли, как выздороветь. Единственное, что может быть полезно, это очень общее сообщение об ошибке (т. Е. «Ошибка произошла, извините») или протоколирование. – DavidG

+0

Используйте третий вариант: добавьте try-catch на самом низком уровне и обработайте ваши общие исключения. – Maarten

ответ

1

Способ 2 возможен. Я бы рекомендовал его, если вы всегда ожидаете такого же исключения.

Если вызываемые методы могут выдавать исключительные исключения, лучше обращаться с ними близко к тому месту, где они были выбраны.

Вы можете определить метод обертку для перехвата исключений, как это:

public bool TryExecuteServiceAction(Action a) { 

    if (a == null) { 
     throw new ArgumentNullException("a"); 
    } 

    try { 
     a(); 
     return true; 
    } 
    catch (SecurityAccessDeniedException sade) { 
     Logger.Error(sade); 
     return false; 
    } 
} 

Продлить эту модель, возвращая ResultObject, который содержит код ошибки, сообщение и т.д., вместо того, чтобы вернуться bool.

Используйте обертка как этот

DoSomethingDto serviceResult = null; 
var success = TryExecuteServiceAction(() => serviceResult = _service.DoSomething(command)); 
if (success) { 
    // we know that the service call was successful and the DTO has data 
    // work with DTO ... 
} 
else { 
    // e.g. show generic error message to user 
} 
Смежные вопросы