Khi nào chính xác hơn? Như bình luận của Kirk cho thấy: nó phụ thuộc. Đôi khi, null
có ý nghĩa hợp lý và đôi khi ngoại lệ phù hợp hơn nếu không có mặc định là hợp lý. Một điều tôi cố gắng làm là nghĩ "đang gọi GetCurrentItem
một thất bại hợp lý hay một điều an toàn?"
Nếu không gọi được GetCurrentItem
khi không có, thì việc ném ngoại lệ là khóa học chính xác. Ví dụ: nếu bộ sưu tập của bạn có thuộc tính HasCurrent
hoặc IsEmpty
nơi người nào đó có thể kiểm tra kết quả trước khi gọi GetCurrentItem
thì họ nên "biết rõ hơn". Nhưng nếu các mục hiện tại là null
là một cách hợp lý chính xác của việc sử dụng lớp học của bạn, sau đó bằng mọi cách thiết kế nó theo cách đó. Dù bằng cách nào, tôi sẽ ghi lại hành vi trong các nhận xét mã để cho người dùng biết về hành vi mong đợi.
Tôi sẽ nói điều này mặc dù việc hiển thị ngoại lệ ArgumentOutOfRange
có thể là chi tiết triển khai chảy máu. Đó là, nếu người dùng của lớp này không có ý tưởng rằng cấu trúc bên trong là một mảng hoặc List<T>
, thì không chảy ra ngoại lệ đó, nhưng hãy nắm bắt nó, bọc nó và ném một cái có ý nghĩa hơn (tùy chỉnh, hoặc một cái gì đó như InvalidOperationException
).
Kể từ khi họ không thực sự trực tiếp đi qua trong một cuộc tranh cãi, họ nhận được một ngoại lệ ArgumentOutOfRange
có thể gây nhầm lẫn :-)
Nguồn
2012-06-22 17:10:22
API chính xác: 'Enumerable.Single' hoặc' Enumerable.SingleOrDefault' là gì? (câu trả lời: nó phụ thuộc) –