2017-01-13 13 views
7

Khi tôi có IEnumerable<SomeClass> từ đó tôi không biết wheter danh sách của nó hay không (theo điều khoản của List<T>), và tôi phải liệt kê IEnumerable để đảm bảo rằng tôi không liệt kê số đếm hai lần (chẳng hạn như lặp qua nó hai lần, hoặc một cái gì đó như thế).Đang truyền sang IList và sau đó gọi ToList() khi null tốt hơn so với ToList đơn giản()?

Resharper cảnh báo tôi về nhiều liệt kê có thể có của IEnumerable - đó là tốt, đôi khi bạn quên nó - và cho phép bạn chọn quickfixes:

  • liệt kê vào mảng
  • liệt kê vào danh sách

Khi tôi chọn Liệt kê để liệt kê, hãy chia sẻ lại giới thiệu một biến cục bộ và gán cho IEnumerable theo cách sau (ví dụ):

var enumeratedItems = items as IList<SomeClass> ?? items.ToList(); 

Bây giờ câu hỏi của tôi là:

Tại sao nó không đơn giản là làm items.ToList();?

Ưu điểm của việc cố gắng truyền tới IList<SomeClass> trước tiên là gì?

Trả lời

7

Có lẽ IEnumerable đã là một danh sách, trong trường hợp này gọi ToList() sẽ chỉ cần tạo một danh sách mới từ một exsiting một, vì vậy trước khi làm việc đó resharper đề nghị để cố gắng cast nó đầu tiên để kiểm tra xem nó là một IList hay không và chỉ trong trường hợp nó không chúng tôi sẽ thực hiện các hoạt động ToList() có một số chi phí.

+0

Ồ tôi hiểu, rất có ý nghĩa! Cảm ơn bạn :) – Mafii

Các vấn đề liên quan