Vì vậy, tôi thường xuyên gặp phải tình huống này ... nơi Do.Something(...)
trả về một bộ sưu tập null, như vậy:
int[] returnArray = Do.Something(...);
Sau đó, tôi cố gắng sử dụng bộ sưu tập này như vậy:
foreach (int i in returnArray)
{
// do some more stuff
}
Tôi chỉ tò mò, tại sao một vòng lặp foreach không thể hoạt động trên một bộ sưu tập null? Nó có vẻ hợp lý với tôi rằng 0 lần lặp sẽ được thực hiện với một bộ sưu tập null ... thay vào đó nó ném a NullReferenceException
. Bất cứ ai cũng biết tại sao điều này có thể được?
Điều này thật khó chịu vì tôi đang làm việc với các API không rõ ràng về chính xác những gì họ trả lại, vì vậy tôi kết thúc với if (someCollection != null)
mọi nơi ...
Chỉnh sửa: Cảm ơn tất cả các bạn đã giải thích về việc foreach
sử dụng GetEnumerator
và nếu không có điều tra viên để nhận, foreach sẽ thất bại. Tôi đoán tôi đang hỏi tại sao ngôn ngữ / thời gian chạy không thể hoặc sẽ không thực hiện kiểm tra null trước khi lấy liệt kê. Dường như với tôi rằng hành vi vẫn sẽ được xác định rõ.
null
giá trị. Bạn có đề xuất điều này cho chỉ foreach
các vòng lặp hoặc các tuyên bố khác không?