Hãy xem xét các lớp và phương pháp sau đây:Null ngoại lệ nào để ném?
public class MyDto
{
public MyDtoChild Child {get; set;}
}
và
public void ProcessDto(MyDto myDto)
{
if(myDto == null) throw new ArgumentNullException("myDto");
this.CheckSomething(myDto.Child.ChildProperty);
}
Nếu gọi với một MyDto
với một null Child
trái với các thiết bị riêng của nó này sẽ ném một NullReferenceException
mà có thể là vô cùng khó khăn để chẩn đoán trong các phương thức phức tạp hơn.
Thông thường tôi ném một số ArgumentNullException
vào lúc bắt đầu của phương thức nếu myDto
là null nhưng ngoại lệ thích hợp để ném nếu myDto.Children
là gì? An ArgumentNullException
? A NullReferenceException
? Ngoại lệ tùy chỉnh?
Bạn có thể đảm bảo rằng 'MyDto.Child' sẽ không bao giờ rỗng bằng cách sử dụng công cụ sửa đổi' readonly' trên trường sao lưu của nó, giả sử rằng 'MyDto' sẽ sở hữu giá trị của trường. – Dai
@KamilT đơn giản chỉ vì nó chỉ đưa tôi vài giờ để theo dõi nơi ref cụ thể này là đến và tôi muốn làm cho nó mạnh mẽ hơn cho các nhà phát triển trong tương lai. – Liath
Có thể cho phép trẻ em được 'null' trong các phần khác của hệ thống hoặc trường hợp ngoại lệ của nó không? –