Trong C #, tôi sử dụng LINQ và IEnumerable một chút. Và tất cả đều tốt và tốt (hoặc ít nhất là gần như vậy).
Tuy nhiên, trong nhiều trường hợp, tôi thấy mình cần một khoảng trống IEnumerable<X>
như một thứ mặc định. Đó là, tôi muốn
for (var x in xs) { ... }
để làm việc mà không cần kiểm tra null. Bây giờ đây là những gì tôi hiện đang làm, tùy thuộc vào bối cảnh lớn hơn:
var xs = f() ?? new X[0]; // when xs is assigned, sometimes
for (var x in xs ?? new X[0]) { ... } // inline, sometimes
Bây giờ, mặc dù những điều trên hoàn toàn ổn đối với tôi - nghĩa là, nếu có bất kỳ "chi phí phụ" nào với việc tạo đối tượng mảng mà tôi không quan tâm - tôi đã tự hỏi:
Có singleton "IEnumerable / IList" trống bất biến trong C # /. NET không? (Và, ngay cả khi không, có cách nào "tốt hơn" để xử lý trường hợp được mô tả ở trên không?)
Java có Collections.EMPTY_LIST
singleton bất biến - "được đánh máy tốt" qua Collections.emptyList<T>()
- phục vụ mục đích này, mặc dù tôi không chắc liệu một khái niệm tương tự có thể hoạt động trong C # hay không vì các generic được xử lý khác nhau.
Cảm ơn.