2013-08-29 3 views
-2

Можно ли добавить исключения к обработчику событий?Можно ли добавлять исключения с обработчиками событий?

Вот мой код:

if (customer == null) 
{ 
    eventListener.HandleEvent(Severity.Informational, line.GetType().Name, String.Format("Could not find the customer corresponding to the taxId '{0}' Current Employment will not be imported.", new TaxId(line.TaxId).Masked)); 
    return; 
} 
if (incomeType == null) 
{ 
     eventListener.HandleEvent(Severity.Warning, line.GetType().Name, String.Format("The income type of '{0}' in the amount of {1:c} is not a known type.", line.Type, line.Amount)); 
     return; 
} 

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

+0

Вы спрашиваете, можете ли вы захватить исключение и передать его методу 'HandleEvent'? – JeremiahDotNet

+0

Каков тип 'eventListener'? – jdphenix

+0

Может быть полезно прочитать это: http://msdn.microsoft.com/en-us/library/ms173160.aspx –

ответ

1

На основе вашего комментария звучит так, будто вы хотите захватить исключение и передать его методу, который нужно обработать.

Добавьте к вашему способу параметр Exception.

public void MethodName(Exception error, ...) 
{ 
    if (error is NullReferenceException) 
    { 
     //null ref specific code 
    } 
    else if (error is InvalidOperationException) 
    { 
     //invalid operation specific code 
    } 
    else 
    { 
     //other exception handling code 
    } 
} 

Вы можете получить исключение, используя блок Try/Catch. Исходный тип исключения будет сохранен, даже если вы применили его к Исключению.

try 
{ 
    //do something 
} 
catch (Exception ex) 
{ 
    //capture exception and provide to target method as a parameter 
    MethodName(ex); 
} 

Вы также можете поймать определенные типы исключений и обрабатывать их различными способами.

try 
{ 
    //do something 
} 
catch (InvalidOperationException ioe) 
{ 
    //captures only the InvalidOperationException 
    InvalidOpHandler(ioe); 
} 
catch (NullReferenceException nre) 
{ 
    //captures only the NullReferenceException 
    NullRefHandler(nre); 
} 
catch (Exception otherException) 
{ 
    //captures any exceptions that were not handled in the other two catch blocks 
    AnythingHandler(otherException); 
} 
+0

У меня есть много методы, где я должен проверить нулевое исключение. Предположим, в методе processcustomer() мне нужно проверить, является ли объект клиента нулевым или нет, и рассмотрим другой метод processincome(), в котором я должен проверить, является ли доход нулевым или нет. Оба метода отображают различные сообщения об ошибках. Можем ли мы использовать общий блок catch, который обрабатывает все исключения? – user2619542

0

Похоже, вы пытаетесь обрабатывать исключения, используя нечто иное, чем try { ... } catch { ... } блоков. Я бы не использовал ничего, чтобы обрабатывать исключения в C# - try, catch и finally предназначены для этой задачи.

Похоже, вы пишете что-то, чтобы справиться с проверкой ввода. Там же аргумент в отношении того или нет исключений подходят для этого, но если вы, вы должны реорганизовать к чему-то вроде этого:

if (customer == null) 
{ 
    throw new ArgumentNullException("customer", 
    String.Format("Could not find the customer corresponding to the taxId '{0}' Current employment will not be imported.", 
    new TaxId(line.TaxId).Masked) 
); 

А потом в вызывающем коде:

try 
{ 
    // code that can throw an exception 
} 
catch (ArgumentNullException ex) 
{ 
    someHandlingCode.HandleEvent(ex); 
    // if you need to rethrow the exception 
    throw; 
} 

Лонга и да, вы можете объявить метод, который принимает исключение в качестве параметра и делает что-то на основе on.

Смежные вопросы