我有這可以通過方法鏈接很整齊地寫一個方法: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