Tôi muốn xác định một ngoại lệ tùy chỉnh và tôi muốn biết liệu tôi có thể bao gồm một lớp thay vì chuỗi làm thông báo hay không. Lý do là tôi muốn gửi thêm thông tin trong một cấu trúc có thể linh hoạt hơn.Tôi có thể đưa một đối tượng mang thông tin bổ sung vào ngoại lệ không?
Trả lời
Có. Chỉ cần tạo một lớp kế thừa từ Ngoại lệ.
class YourException : Exception
{
public YourException(SpecialObject thethingYouWantIncluded)
{
ExtraObject = thethingYouWantIncluded;
}
public SpecialObject ExtraObject { get; private set; }
}
sau đó
throw new YourException(new SpecialObject());
và
catch (YourException ex) { /* do something with ex.ExtraObject here */ }
Có bạn có thể, loại.
Trong C#, tất cả ngoại lệ là các lớp, chúng là các trường hợp của System.Exception
hoặc một số lớp bắt nguồn từ đó. Nếu bạn muốn tạo ngoại lệ tùy chỉnh, bạn chỉ cần xác định một lớp mới kế thừa từ Exception
.
Trong lớp tùy chỉnh này, bạn có thể thêm bất cứ điều gì thuộc tính bổ sung, các lĩnh vực, vv mà bạn muốn:
public class CustomException : Exception
{
public Object CustomThing { get; set; }
}
Khi bạn bắt như một ngoại lệ vào một biến kiểu CustomException
bạn sẽ có quyền truy cập vào tất cả các các thuộc tính tùy chỉnh mà bạn đã xác định, giống như bất kỳ lớp nào khác.
Tuy nhiên, những gì bạn không thể làm là thay đổi thực tế là Exception.Message
là một chuỗi. Lớp thông báo tùy chỉnh của bạn sẽ có thuộc tính Message
và nó sẽ là string
và bạn không thể thay đổi nó. Bạn sẽ cần phải xác định một chuỗi tùy chỉnh bao gồm tất cả các thông tin có liên quan. Bạn có thể ghi đè thuộc tính Message
để trả lại thông tin từ thuộc tính tùy chỉnh của mình, nhưng nó vẫn cần phải là một chuỗi:
public class CustomException : Exception
{
public override string Message
{
get
{
if (this.CustomThing == null)
{
return base.Message;
}
else
{
return string.Format("Custom thing: {0}", this.CustomThing);
}
}
}
}
+1 để đề cập: "Tuy nhiên, những gì bạn không thể làm là thay đổi thực tế là Exception.Message là một chuỗi." – hometoast
- 1. Ngoại lệ reraising ruby w/đối số chuỗi bổ sung
- 2. Thêm thông tin vào một ngoại lệ
- 3. Ngoại lệ chú thích với thông tin bổ sung mà không bắt chúng
- 4. Có thể thêm các trường bổ sung vào bảng bổ sung @ManyToMany Hibernate không?
- 5. Poplet Leaflet với thông tin bổ sung từ GeoJSON
- 6. Kết hợp thông tin bổ sung với .NET Enum
- 7. cung cấp cho người dùng openid thông tin bổ sung
- 8. Android - Bắt đầu một dịch vụ với thông tin bổ sung thông qua put/getExtra
- 9. Thêm thông tin tiêu đề bổ sung trong email codeigniter
- 10. Với ba.js, tôi có thể đính kèm thông tin vào một đối tượng, chẳng hạn như URL không?
- 11. Jackson :: thêm các trường bổ sung vào một đối tượng trong tuần tự hóa
- 12. Loại ngoại lệ nào nên được đưa vào JavaScript?
- 13. Có thể một đối tượng Ngoại lệ tăng thêm ngoại lệ khác do lỗi nội bộ của nó không?
- 14. Làm cách nào để thay đổi thông báo ngoại lệ của đối tượng Ngoại lệ?
- 15. Django 1.5: thông tin người dùng và thông tin bổ sung
- 16. Không thể truy cập một ngoại lệ đối tượng xử lý trong WCF
- 17. Tôi có thể tự động tải các tệp cấu hình Spring bổ sung vào một WebApplicationContext hiện tại không?
- 18. Thêm các trường bổ sung vào fullcalendar
- 19. Có sự khác biệt giữa "bổ sung" và "bổ sung bitwise" không?
- 20. Tôi có cần máy bay bổ sung không?
- 21. Ngoại lệ. Thiếu thông tin dữ liệu trong EntLib log
- 22. Địa chỉ WebSocket có thể mang thông số không?
- 23. Mang thông tin GoogleMapsWindow về phía trước
- 24. Ở Django, làm thế nào tôi có thể nhận được thông báo của một ngoại lệ?
- 25. Có hàm lỗi bổ sung được chia tỷ lệ trong trăn có sẵn không?
- 26. Có thể thực hiện bổ sung trong Regex không?
- 27. Cách kiểm tra các thuộc tính bổ sung của Ngoại lệ được mong đợi bằng ScalaTest
- 28. Đời sống đối tượng ngoại lệ
- 29. Tôi có thể đưa dịch vụ vào chỉ thị không?
- 30. RAII hoạt động như thế nào khi một nhà xây dựng đưa ra một ngoại lệ?
"Ném một lớp thay vì một chuỗi" ??? Từ khóa ném luôn ném ra một ngoại lệ là một lớp Vì vậy, bạn luôn luôn ném một lớp .. – nitgeek