Цепочка методов LINQ и детальная обработка ошибок

У меня есть метод, который можно довольно аккуратно написать с помощью цепочки методов:

return viewer.ServerReport.GetParameters()
    .Single(p => p.Name == Convention.Ssrs.RegionParamName)
    .ValidValues
    .Select(v => v.Value);

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

T Чтобы добиться этого, мне нужно разбить всю свою цепочку и следовать за каждым вызовом блоком if. Это делает код намного менее читабельным.

В идеале я хотел бы иметь возможность вплетать некоторые цепные вызовы методов, которые позволили бы мне обрабатывать неожиданные результаты в каждой точке (например, генерировать осмысленное исключение, такое как new ConventionException("Отчет не содержит параметров" ), если первый метод возвращает пустую коллекцию). Может ли кто-нибудь предложить простой способ добиться такого?

Изменить:

Это результат использования ответа @JeffreyZhao:

return viewer.ServerReport.GetParameters()
    .Assert(result => result.Any(), "The report contains no parameter")
    .SingleOrDefault(p => p.Name == Convention.Ssrs.RegionParamName)
    .Assert(result => result != null, "The report does not contain a region parameter")
    .ValidValues
    .Select(v => v.Value)
    .Assert(result => result.Any(), "The region parameter in the report does not contain any valid value");
6
задан Clafou 7 June 2012 в 11:12
поделиться