Tôi thích sử dụng: ArgumentException
, ArgumentNullException
, và ArgumentOutOfRangeException
.
Cũng có những lựa chọn khác, nó không tập trung quá nhiều vào chính đối số, mà là đánh giá toàn bộ cuộc gọi:
InvalidOperationException
- Đối số có thể ổn, nhưng không ở trạng thái hiện tại của đối tượng. Tín dụng vào STW (trước đây là Yoooder). Bình chọn câu trả lời của anh ấy là tốt.
NotSupportedException
- Các đối số được truyền vào là hợp lệ, nhưng chỉ không được hỗ trợ trong việc thực hiện này. Hãy tưởng tượng một máy khách FTP và bạn truyền một lệnh trong đó máy khách không hỗ trợ.
Bí quyết là đưa ra ngoại lệ thể hiện rõ nhất lý do tại sao phương thức không thể được gọi là như vậy. Tốt nhất, ngoại lệ nên được chi tiết về những gì đã sai, tại sao nó sai và cách khắc phục.
Tôi thích khi thông báo lỗi trỏ đến trợ giúp, tài liệu hoặc các tài nguyên khác. Ví dụ: Microsoft đã thực hiện bước đầu tiên tốt với các bài viết KB của họ, ví dụ: Tại sao tôi nhận được thông báo lỗi "Thao tác bị hủy bỏ" khi tôi truy cập trang Web trong Internet Explorer? . Khi bạn gặp lỗi, họ chỉ cho bạn bài viết KB trong thông báo lỗi. Điều họ làm không tốt là họ không nói với bạn, tại sao cụ thể là nó thất bại.
Cảm ơn STW (ex Yoooder) một lần nữa cho các bình luận.
Đáp lại sự theo dõi của bạn, tôi sẽ ném một cái ArgumentOutOfRangeException
. Nhìn vào những gì MSDN nói về ngoại lệ này:
ArgumentOutOfRangeException
được ném khi một phương thức được gọi và ít nhất một trong các đối số được truyền cho phương thức đó không phải là tham chiếu null ( Nothing
trong Visual Basic) và không chứa giá trị hợp lệ.
Vì vậy, trong trường hợp này, bạn đang truyền một giá trị, nhưng đó không phải là giá trị hợp lệ, vì phạm vi của bạn là 1 V1212. Tuy nhiên, cách bạn ghi lại nó làm cho nó rõ ràng, những gì API của bạn ném. Bởi vì mặc dù tôi có thể nói ArgumentOutOfRangeException
, một nhà phát triển khác có thể nói ArgumentException
. Làm cho nó dễ dàng và tài liệu hành vi.