2013-08-07 3 views
0

У меня есть эта функция, которую я использую для моей проверкиПолучение имени переменной, во время обработки которой произошло исключение?

public void Validate() 
    { 
     Action<List<Field>> validateFields = (field) => 
      { 
       if (field != null && field.Any()) 
       { 
        field.ForEach(x => x.Validate()); 
       } 
      }; 

     new List<List<Field>> { this.PersonElements, this.ContactElements, this.MiscElements }.ForEach(x => 
      { 
       try 
       { 
        validateFields(x); 
       } 
       catch (Exception e) 
       { 
        Log.ErrorFormat("An exception has occurred while validation of {1} : {0}", e, x.ToString()); // print something as x.Name.ToString()); 
        throw; 
       } 
      }); 
    } 

Проблема с этой линии:

new List<List<Field>> { this.PersonElements, this.ContactElements, this.MiscElements }.ForEach(x => 

мне нужно (в случае, если исключение произошло) лог-то как

Исключение произошло при попытке обработать «PersonElements/ContactElements/MiscElements» в зависимости от того, в какой валидации произошло исключение.

Как получить имя переменной списка в случае возникновения исключения во время его обработки?

Заранее спасибо.

+1

Вы можете использовать 'List <Кортеж >>' и хранить имя элемента в строке части. –

+0

@NicoSchertler: кажется логичным для меня. Благодарю. –

+0

@NicoSchertler: Рассмотрите отправку в качестве ответа, я приму его. BTW, способный добиться этого .. спасибо :) –

ответ

0

Переменные имена имеют смысл только в их контексте. К тому же объекту можно было получить доступ с разными переменными. Поэтому разумно указать имя коллекции в виде типа Tuple<String, List<Field>>.

new List<Tuple<List<Field>>> { Tuple.Create("PersonElements", this.PersonElements), ... }.ForEach ( 
    ... 
    validateFields(x.Item2); 
    ... 
    Log.ErrorFormat("An exception has occurred while validation of {1} : {0}", e, x.Item1); 
Смежные вопросы