Tôi đã đọc rất nhiều bài báo (và một vài câu hỏi tương tự khác đã được đăng trên StackOverflow) về cách thức và thời điểm sử dụng các xác nhận, và tôi hiểu rõ về chúng. Nhưng tôi vẫn không hiểu loại động lực nào nên thúc đẩy tôi sử dụng Debug.Assert
thay vì ném ra một ngoại lệ rõ ràng. Ý tôi là, trong .NET, phản hồi mặc định cho một xác nhận không thành công là "dừng thế giới" và hiển thị một hộp thông báo cho người dùng. Mặc dù loại hành vi này có thể được sửa đổi, nhưng tôi thấy thật khó chịu và thừa thãi khi làm điều đó, trong khi thay vào đó, tôi có thể chỉ cần đưa ra một ngoại lệ phù hợp. Bằng cách này, tôi có thể dễ dàng ghi lỗi vào nhật ký của ứng dụng ngay trước khi tôi ném ngoại lệ và thêm vào đó, ứng dụng của tôi không nhất thiết phải đóng băng.
Vì vậy, tại sao tôi nên sử dụng Debug.Assert
thay vì một ngoại lệ đơn giản? Đặt một khẳng định ở nơi không nên có thể chỉ gây ra tất cả các loại "hành vi không mong muốn", vì vậy theo quan điểm của tôi, tôi thực sự không thu được gì bằng cách sử dụng một khẳng định thay vì ném một ngoại lệ. Bạn có đồng ý với tôi, hay tôi đang thiếu một cái gì đó ở đây?
Lưu ý: Tôi hoàn toàn hiểu sự khác biệt "trên lý thuyết" (Gỡ lỗi so với Phát hành, cách sử dụng, v.v.), nhưng theo tôi thấy, tốt hơn là tôi nên ném một ngoại lệ thay vì thực hiện xác nhận. Vì nếu một lỗi được phát hiện trên bản phát hành sản xuất, tôi vẫn muốn "xác nhận" không thành công (xét cho cùng, "chi phí" nhỏ đến mức nực cười), vì vậy tốt hơn hết tôi nên ném một ngoại lệ.
Chỉnh sửa: Theo cách tôi thấy, nếu một xác nhận không thành công, điều đó có nghĩa là ứng dụng đã vào một loại trạng thái không mong muốn, bị hỏng. Vậy tại sao tôi lại muốn tiếp tục thực hiện? Không quan trọng nếu ứng dụng chạy trên phiên bản gỡ lỗi hoặc phát hành. Điều này cũng xảy ra với cả hai