Đôi khi việc thực hiện một ToList()
truy vấn linq của bạn có thể rất quan trọng để đảm bảo các truy vấn của bạn được thực thi tại thời điểm và theo thứ tự mà bạn mong đợi. Tuy nhiên, những kịch bản đó rất hiếm và không có gì phải lo lắng quá nhiều cho đến khi chúng thực sự chạy vào chúng.
Câu chuyện dài, sử dụng IEnumerable
bất cứ lúc nào bạn chỉ cần lặp, sử dụng IList
khi bạn cần lập chỉ mục trực tiếp và cần một mảng có kích thước động (nếu bạn cần lập chỉ mục trên một mảng có kích thước cố định thì chỉ cần sử dụng một mảng tiêu chuẩn).
Đối với các điều thời gian thực hiện, bạn luôn có thể sử dụng một danh sách như một IEnumerable
biến, vì vậy cảm thấy tự do để trả lại một IEnumerable
bằng cách thực hiện một .ToList();
, hoặc vượt qua trong một tham số như một IEnumerable
bằng cách thực hiện .ToList()
trên IEnumerable
để lực lượng thực hiện ngay sau đó và ở đó. Hãy cẩn thận rằng bất cứ khi nào bạn buộc thực thi với .ToList()
bạn, đừng bám vào IEnumerable
biến mà bạn vừa thực hiện và thực hiện lại, nếu không bạn sẽ tăng gấp đôi số lần lặp trong truy vấn LINQ của mình một cách không cần thiết.
Liên quan đến MVC, thực sự không có gì đặc biệt cần lưu ý ở đây. Nó sẽ tuân theo các quy tắc thời gian thực hiện giống như phần còn lại của .NET, tôi nghĩ rằng bạn có thể có ai đó bị nhầm lẫn do ngữ nghĩa thực thi bị trì hoãn trong quá khứ và đổ lỗi cho MVC cho bạn biết điều này có liên quan, nhưng nó không phải. Các ngữ nghĩa thực thi bị trì hoãn gây nhầm lẫn cho tất cả mọi người lúc đầu (và thậm chí trong một thời gian sau đó; chúng có thể là một mánh khóe cảm ứng). Mặc dù vậy, một lần nữa, đừng lo lắng về điều đó cho đến khi bạn thực sự quan tâm đến việc đảm bảo truy vấn LINQ không được thực hiện hai lần hoặc yêu cầu nó được thực hiện theo một thứ tự nhất định so với mã khác, tại thời điểm đó, hãy gán biến của bạn cho chính nó. ToList () để thực thi và bạn sẽ ổn thôi.