我有这可以通过方法链接很整齐地写一个方法:LINQ方法链和精细错误处理
return viewer.ServerReport.GetParameters()
.Single(p => p.Name == Convention.Ssrs.RegionParamName)
.ValidValues
.Select(v => v.Value);
但是我希望能够做一些检查,在每一个点,我想如果任何链式方法返回意外结果,则提供有用的诊断信息。
为了实现这个目标,我需要分解我所有的链接,并按照if
块的方式跟随每个呼叫。它使代码更不易读。
理想情况下,我希望能够编织一些链接的方法调用,这将允许我在每个点处理意外的结果(例如,如果第一个方法返回空集合,则抛出一个有意义的异常,例如new ConventionException("The report contains no parameter")
)。任何人都可以提出一个简单的方法来实现这样的事情?
编辑:
这是使用@ 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");
这看起来不错。考虑到错误检查的本质,我怀疑它可能不需要泛型方法(即通常错误检查的性质是特定于给定类型的)。有一个扩展方法只是返回未经修改的输入的一般方法正是需要的。 – Chris
你说得对。我添加了一个更通用的'Validate'方法,在这种情况下,泛型是必需的。 –
不错。我希望我可以再次为这个不错的小验证功能+1。 :) – Chris