Nếu "ném" tuyên bố trong câu hỏi thực sự là unreachable dưới bất kỳ kịch bản có thể sau đó nó phải được xóa và thay thế bằng:
Debug.Fail("This should be unreachable; please find and fix the bug that caused this to be reached.");
Nếu mã có thể truy cập sau đó viết một bài kiểm tra đơn vị đó kiểm tra kịch bản đó. Các kịch bản báo cáo lỗi cho các phương thức có thể truy cập công khai là các kịch bản hoàn toàn hợp lệ. Bạn phải xử lý tất cả các đầu vào một cách chính xác, ngay cả đầu vào xấu. Nếu điều đúng đắn cần làm là ném một ngoại lệ thì hãy kiểm tra xem bạn có đang ném một ngoại lệ hay không.
CẬP NHẬT: theo nhận xét, thực tế là không thể xảy ra lỗi khi truy cập và do đó mã không thể truy cập được. Nhưng bây giờ Debug.Fail không thể truy cập được, và nó không biên dịch vì trình biên dịch ghi chú rằng một phương thức trả về một giá trị có một điểm kết thúc có thể truy cập.
Vấn đề đầu tiên không thực sự là vấn đề; chắc chắn công cụ bảo hiểm mã phải được cấu hình để bỏ qua mã chỉ gỡ lỗi không thể truy cập được. Nhưng cả hai vấn đề có thể được giải quyết bằng cách viết lại vòng lặp:
public int FirstInvalidDigitPosition
{
get
{
int index = 0;
while(true)
{
Debug.Assert(index < this.positions.Length, "Attempt to get invalid digit position but there are no invalid digits!");
if (!this.positions[index].Valid) return index;
index++;
}
}
}
Một phương pháp khác sẽ được sắp xếp lại mã để bạn không có vấn đề ở nơi đầu tiên:
public int? FirstInvalidDigitPosition {
get {
for (int index = 0; index < this.positions.Count; ++index) {
if (!this.positions[index].Valid) return index;
}
return null;
}
}
và bây giờ bạn không cần phải hạn chế người gọi để gọi AreThereInvalidDigits trước; chỉ cần làm cho nó hợp pháp để gọi phương pháp này bất cứ lúc nào. Điều đó có vẻ như là điều an toàn hơn để làm. Các phương pháp phát nổ khi bạn không thực hiện một số kiểm tra tốn kém để xác minh rằng chúng an toàn để gọi là các phương pháp dễ vỡ, nguy hiểm.
Nguồn
2010-08-20 21:59:42
Thực tế là bạn nói rằng nó không nên được thực hiện và không thể liên lạc nói với tôi "Xóa nó". Bạn đã xác thực chuỗi là không hợp lệ để đến đây, vì vậy bạn biết thuộc tính sẽ trả về một cái gì đó. – Michael