Tôi có một lớp ngoại lệ tùy chỉnh chứa một số trường bổ sung. Tôi muốn chúng được viết ra theo phương pháp ToString()
, nhưng nếu tôi thực hiện ToString()
của riêng mình, tôi mất một số thứ hữu ích khác (như viết tên kiểu ngoại lệ, dữ liệu ngoại lệ bên trong và dấu vết ngăn xếp).C#: Ghi đè phương thức ToString() cho các ngoại lệ tùy chỉnh
Cách/mẫu tốt nhất để triển khai phương pháp ToString()
của riêng bạn cho các trường hợp ngoại lệ như vậy là gì? Lý tưởng nhất là nó nên tái sử dụng cơ chế hiện có, nhưng được định dạng theo cách tương tự như việc thực hiện ToString()
mặc định.
UPDATE: thêm vào trước hoặc nối các lĩnh vực tùy chỉnh của tôi vào base.ToString() văn bản không phải là IMHO lý tưởng, ví dụ
PimTool.Utilities.OERestServiceUnavailableException: test ---> System.InvalidOperationException: inner message
--- End of inner exception stack trace ---
at PimTool.Tests.Services.OE.OERestClientTests.ExceptionsLogging() in D:\svn\NewPimTool\PimTool.Tests\Services\OE\OERestClientTests.cs:line 178,
StatusCode=0, message='test', requestId='535345'
nghĩa các lĩnh vực tùy chỉnh được viết vào cuối của (có khả năng dài) mô tả ngoại lệ. Mặt khác, tôi muốn loại ngoại lệ là thông tin đầu tiên được ghi trong phần mô tả.
CẬP NHẬT 2: Tôi đã triển khai giải pháp cho vấn đề này, hãy tìm câu trả lời của riêng tôi bên dưới.
Tôi đang tìm kiếm một điều tương tự, tôi muốn thêm một số thông tin bổ sung bên ngoài không trong trường Thông báo, nhưng tôi muốn định dạng ToString được giữ, với tất cả dấu vết ngăn xếp và ngoại lệ bên trong trên đó. Sẽ thú vị khi xem mã cho Exception.ToString() và sao chép nó thêm thông tin. – pauloya
Vâng mã bao gồm hầu hết những điều bạn đã đề cập. Mặc dù sau đó tôi nhớ rằng tôi có thể đã sử dụng từ điển Exception.Data để lưu trữ các công cụ tùy chỉnh của mình. Tôi đoán trong trường hợp đó điều này sẽ được trả lại với việc thực hiện mặc định của ToString(), nhưng tôi đã không thử nó được nêu ra. –