Giả sử rằng loại phần tử trong tệp. Đầu đọc là T bạn có thể làm điều này
foreach(var header in file.Headers ?? Enumerable.Empty<T>()){
//do stuff
}
điều này sẽ tạo ra một danh sách trống của T nếu tệp. Bộ đọc là null. Tuy nhiên, nếu loại tệp là loại bạn sở hữu, tôi sẽ cân nhắc việc thay đổi getter Headers
thay thế. null
là giá trị không xác định, vì vậy nếu có thể thay vì sử dụng null là "Tôi biết không có phần tử nào" khi null thực sự (/ ban đầu) nên được hiểu là "Tôi không biết nếu có bất kỳ phần tử nào" hãy sử dụng một tập hợp trống để hiển thị mà bạn biết không có phần tử nào trong tập hợp. Điều đó cũng sẽ KHÔ hơn vì bạn sẽ không phải kiểm tra null thường xuyên.
CHỈNH SỬA như một phần tiếp theo về đề xuất của Jons, bạn cũng có thể tạo một phương thức mở rộng thay đổi mã trên thành
foreach(var header in file.Headers.OrEmptyIfNull()){
//do stuff
}
Trong trường hợp bạn không thể thay đổi getter, đây sẽ là ưu tiên của riêng tôi vì nó thể hiện ý định rõ ràng hơn bằng cách đặt tên cho hoạt động (OrEmptyIfNull)
Phương pháp tiện ích mở rộng được đề cập ở trên có thể khiến trình tối ưu hóa không thể phát hiện được. Cụ thể, những người có liên quan đến IList sử dụng quá tải phương pháp này có thể bị loại bỏ
public static IList<T> OrEmptyIfNull<T>(this IList<T> source)
{
return source ?? Array.Empty<T>();
}