メソッドチェーンを使用して、かなりきれいに記述できるメソッドがあります。
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");