У меня есть метод, который можно довольно аккуратно написать с помощью цепочки методов:
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");