Tôi có một phương pháp mà có thể được viết khá gọn gàng qua phương pháp chaining:LINQ phương pháp chaining và lỗi hột xử lý
return viewer.ServerReport.GetParameters()
.Single(p => p.Name == Convention.Ssrs.RegionParamName)
.ValidValues
.Select(v => v.Value);
Tuy nhiên tôi muốn để có thể làm một số kiểm tra tại mỗi điểm như tôi muốn cung cấp thông tin chẩn đoán hữu ích nếu bất kỳ phương pháp xích nào trả về kết quả không mong muốn.
Để đạt được điều này, tôi cần phải chia nhỏ tất cả chuỗi và theo dõi từng cuộc gọi với khối if
. Nó làm cho mã dễ đọc hơn rất nhiều. Lý tưởng nhất là tôi muốn có thể dệt trong một số cuộc gọi phương thức xích cho phép tôi xử lý các kết quả không mong muốn tại mỗi điểm (ví dụ: ném một ngoại lệ có ý nghĩa như new ConventionException("The report contains no parameter")
nếu phương thức đầu tiên trả về một bộ sưu tập trống). Bất cứ ai có thể đề xuất một cách đơn giản để đạt được một điều như vậy?
Edit:
Đây là kết quả của việc sử dụng @ câu trả lời JeffreyZhao của:
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");
này có vẻ tốt. Và với bản chất của việc kiểm tra lỗi, tôi nghi ngờ có thể là các phương thức chung sẽ không cần thiết (nghĩa là bản chất của kiểm tra lỗi là cụ thể đối với một kiểu đã cho). Cách tiếp cận chung của việc có một phương thức mở rộng mà chỉ trả về đầu vào chưa được sửa đổi mặc dù chính xác là cái cần thiết. – Chris
Bạn nói đúng.Tôi đã thêm một phương thức 'Validate' tổng quát hơn và trong trường hợp đó thì generic là bắt buộc. –
Rất đẹp. Tôi ước tôi có thể +1 nó một lần nữa cho chức năng 'Validate' nhỏ đẹp đó. :) – Chris