Khi phân tích cú pháp đầu vào của người dùng, thông thường không nên ném và bắt ngoại lệ mà nên sử dụng các phương thức xác thực. Trong .NET BCL, đây sẽ là sự khác biệt giữa, ví dụ, int.Parse
(ném ngoại lệ vào dữ liệu không hợp lệ) và int.TryParse
(trả false
về dữ liệu không hợp lệ).
Tôi đang thiết kế của riêng tôi
Foo.TryParse(string s, out Foo result)
phương pháp và tôi không chắc chắn về giá trị trả về. Tôi có thể sử dụng bool
như TryParse
phương thức riêng của .NET , nhưng điều đó sẽ không đưa ra dấu hiệu nào về loại lỗi, về lý do chính xác tại sao s
không thể phân tích cú pháp thành một Foo
. (Ví dụ: s
có thể có dấu ngoặc đơn chưa từng có hoặc số ký tự sai hoặc Bar
không có ký tự tương ứng Baz
, v.v.)
Là người dùng API, tôi không thích các phương thức chỉ trả về Boolean thành công / thất bại mà không cho tôi biết lý do tại sao thao tác thất bại. Điều này làm cho việc gỡ lỗi một trò chơi đoán và tôi cũng không muốn áp đặt điều đó lên các khách hàng của thư viện của mình.
Tôi có thể nghĩ ra rất nhiều cách giải quyết cho vấn đề này (trả về mã trạng thái, trả về chuỗi lỗi, thêm chuỗi lỗi làm tham số out), nhưng tất cả chúng đều có nhược điểm tương ứng và tôi cũng muốn tuân thủ các quy ước của .NET Framework .
Vì vậy, câu hỏi của tôi là như sau:
Có các phương thức trong .NET Framework mà (a) phân tích cú pháp đầu vào mà không đưa ra ngoại lệ và (b) vẫn trả về thông tin lỗi chi tiết hơn so với Boolean đúng / sai đơn giản?
Parse()
.