2014-12-12 3 views
6

У меня есть следующий код:Почему для каждого из них выбрасывается только одно исключение?

if (errorList != null && errorList.count() > 0) 
{ 
    foreach (var error in errorList) 
    { 
     throw new Exception(error.PropertyName + " - " error.ErrorMessage, error.EntityValidationFailed); 
    }  
} 

Почему это только бросить одно исключение, когда несколько ошибок в списке?

+4

Подумайте об этом так: что вы ожидаете от исполнения? Что вы ожидаете от первого броска? –

+0

Исключения прекращают нормальное выполнение. Более подробную информацию см: http://stackoverflow.com/questions/278466/throwing-multiple-exceptions-in-net-c – pseudocoder

+3

@pseudocoder: Я прошу ОП думать через один шаг в времени, эффективно. –

ответ

10

Исключение исключения нарушает выполнение кода, если он не обрабатывается.

Поэтому код, как:

foreach (var error in errorList) 
{ 
    try 
    { 
      throw new Exception(error.PropertyName + " - " error.ErrorMessage, error.EntityValidationFailed); 
    } 

    catch(...) {} 
} 

поднимет несколько исключений, чтобы быть точным errorList.Length раз, которые будут обрабатываться с помощью catch(..), внутри тела цикла, если повторно не выброшен из catch(..), останется там.

9

Вы можете выбросить только одно исключение, однако вы можете создать связку Exceptions, а затем в конце добавить AggregateException.

var exceptions = new List<Exception>(); 
foreach (var error in errorList) 
{ 
    exceptions.Add(new Exception(error.PropertyName + " - " error.ErrorMessage, error.EntityValidationFailed)); 
} 

if(exceptions.Any()) 
{ 
    throw new AggregateException(exceptions); 
} 
+0

Я бы назвал переменную 'exceptions' хотя;) – Fenton

+2

Упс, толстые пальцы ;-) –

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