Tôi đang làm việc bên trong phương thức thực hiện một loạt kiểm tra xác thực và bất kỳ kiểm tra nào không thành công, gọi số Action<string>
để chạy một số mã từ chối phổ biến. Các thiết lập được một cái gì đó tương tự như sau:Trả lại từ phương thức gốc bên trong Hành động <string>
public void ValidationMethod() {
Action<string> rejectionRoutine = (rejectionDescription) => {
// do something with the reject description
// other common code
};
if (condition != requiredValue) {
rejectionRoutine("Condition check failed");
// I currently have to put `return` here following every failed check
}
// many more checks following this
}
Trong hệ thống này một lần một séc đã thất bại xác nhận tôi không có nhu cầu để xác nhận phần còn lại, tôi chỉ muốn chạy mã từ chối phổ biến bên trong hành động và thoát khỏi phương pháp . Hiện nay để làm điều này tôi chỉ cần return
trên dòng tiếp theo sau một cuộc gọi đến rejectionRoutine
. Tôi tự hỏi nếu có một cách tôi có thể kết hợp khả năng trả lại hoặc chấm dứt thực hiện phương pháp cha mẹ từ bên trong Action
?
Tôi biết điều này hơi khó tính nhưng tôi cảm thấy nó tốt hơn cho khả năng mở rộng xuống đường nếu người khác cần thêm kiểm tra xác thực bổ sung (họ sẽ không phải lo lắng về việc đưa trở lại tất cả nơi) cũng như đóng gói hành vi chung của việc thực hiện kết thúc bên trong mã được cho là phổ biến đối với những trường hợp này.
Ahhh Servy, tâm trí tuyệt vời nghĩ như nhau.Tôi đã viết mã đã gần như giống hệt với điều này trước khi tôi tìm thấy một vài điểm mà nó không có ý nghĩa. Có một số kiểm tra sẽ ném ngoại lệ nếu chúng được đánh giá khi kiểm tra trước đó nên có teriminated. I E. check1 là giá trị! = null, check2 có thể làm điều gì đó với giá trị giả định rằng nó không thể là null nếu chúng ta có được điều này xa –
@ JesseCarter Sau đó, như tôi đã nói ở phần cuối, bạn sẽ cần sử dụng 'List , string >> '. Nó chỉ là một chút nhiều mã. –
Servy
Có lẽ tôi đang bối rối về cách bool trong Func sẽ được đánh giá? Việc đánh giá thực tế giá trị bool có bị trì hoãn cho đến khi Func được gọi không? Tôi giả định rằng nó sẽ được đánh giá ngay khi Func được tạo ra –