Off đỉnh đầu của tôi, tôi có thể nghĩ đến 4 cách để kiểm tra cho các đối số null:Ưu điểm/nhược điểm của các phương pháp khác nhau để kiểm tra điều kiện tiên quyết?
Debug.Assert(context != null);
Contract.Assert(context != null);
Contract.Requires(context != null);
if (context == null) throw new ArgumentNullException("context");
Tôi luôn sử dụng phương pháp cuối cùng, nhưng tôi chỉ thấy một đoạn mã được sử dụng Contract.Requires
, mà tôi 'không quen thuộc với. Ưu điểm/nhược điểm của từng phương pháp là gì? Có cách nào khác không?
Trong VS2010 w/Resharper,
Contract.Assert
cảnh báo tôi rằng biểu thức luôn là đúng (làm thế nào nó biết, tôi không hoàn toàn chắc chắn ... không thể HttpContext được null?),Contract.Requires
bị nhạt nhòa dần và nó nói với tôi trình biên dịch sẽ không gọi phương thức (tôi giả sử vì lý do thứ nhất, nó sẽ không bao giờ được null), và- nếu tôi thay đổi phương pháp cuối cùng để
context != null
tất cả mã follo cánh bị phai mờ và nó cho tôi biết mã là không thể truy cập heuristically.
Vì vậy, có vẻ như 3 phương pháp cuối cùng có một số loại thông minh được tích hợp trong trình kiểm tra tĩnh VS và Debug.Assert
chỉ là câm.
Câu hỏi không rõ ràng. Bạn có thực sự cố gắng sử dụng chúng cùng một lúc không? –
@Matthew: Không chắc nó không rõ ràng ... không, tôi không cố gắng sử dụng chúng cùng một lúc. Tôi đã tạo ra một đoạn mã như thế chỉ để minh họa các cách khác nhau mà bạn có thể kiểm tra null. – mpen
Đó là những gì tôi nghĩ từ phần còn lại của câu hỏi, nhưng trình bày cú pháp bạn sử dụng là kỳ quặc. –