Một vấn đề phổ biến trong bất kỳ ngôn ngữ nào là để khẳng định rằng các tham số được gửi đến một phương thức đáp ứng yêu cầu của bạn và nếu không, để gửi các thông báo lỗi đẹp, có thông tin. Loại mã này được lặp đi lặp lại nhiều lần, và chúng tôi thường cố gắng tạo ra những người trợ giúp cho nó. Tuy nhiên, trong C#, có vẻ như những người giúp đỡ bị buộc phải đối phó với một số trùng lặp buộc chúng tôi bởi ngôn ngữ và trình biên dịch. Để thể hiện ý tôi, hãy để tôi trình bày một số mã thô không có người giúp đỡ, theo sau là một người trợ giúp có thể. Sau đó, tôi sẽ chỉ ra sự trùng lặp trong helper và cụm từ câu hỏi của tôi một cách chính xác.Cú pháp mượt mà, hấp dẫn nhất mà bạn đã tìm thấy để xác nhận tính chính xác của thông số trong C# là gì?
Thứ nhất, các mã không có người giúp đỡ:
public void SomeMethod(string firstName, string lastName, int age)
{
if(firstName == null)
{
throw new WhateverException("The value for firstName cannot be null.");
}
if(lastName == null)
{
throw new WhateverException("The value for lastName cannot be null.");
}
// Same kind of code for age, making sure it is a reasonable range (< 150, for example).
// You get the idea
}
}
Bây giờ, các mã với một nỗ lực hợp lý tại một helper:
public void SomeMethod(string firstName, string lastName, int age)
{
Helper.Validate(x=> x !=null, "firstName", firstName);
Helper.Validate(x=> x!= null, "lastName", lastName);
}
Các chính câu hỏi là: Lưu ý cách mã có s giá trị của thông số và tên của tham số ("firstName" và firstName). Điều này là để thông báo lỗi có thể nói, "Blah blah blah giá trị cho tham số firstName." Bạn đã tìm thấy cách nào để giải quyết vấn đề này bằng cách sử dụng sự phản chiếu hay bất cứ điều gì khác? Hoặc một cách để làm cho nó ít đau đớn?
Và thông thường hơn, bạn có tìm thấy bất kỳ cách nào khác để hợp lý hóa nhiệm vụ xác thực thông số này trong khi giảm trùng lặp mã không?
EDIT: Tôi đã đọc mọi người nói về việc sử dụng thuộc tính Tham số, nhưng không bao giờ tìm thấy cách nào đó xung quanh trùng lặp. Bất cứ ai có may mắn với điều đó?
Cảm ơn!
Sử dụng của 'ApplicationException' lớp không được khuyến khích. –
Nitpicking: _Direct_ sử dụng 'ApplicationException' không được khuyến nghị –
OK, tôi đã đổi thành Ngoại lệ, chỉ để tránh bất kỳ phiền nhiễu nào.Là một sang một bên, nếu đề xuất được dựa trên ý kiến từ những người đã viết cuốn sách "Hướng dẫn khung", sau đó tôi không thực sự thuyết phục (mặc dù những kẻ đã viết một số công cụ tốt). Nhưng đó là một cuộc thảo luận cho một ngày khác. –