GetNames()
trả về một IEnumerable
. Vì vậy, nếu bạn lưu trữ kết quả đó:
IEnumerable foo = GetNames();
Sau đó, mỗi khi bạn liệt kê foo
, GetNames()
phương thức được gọi lại (không phải theo nghĩa đen, tôi không thể tìm thấy liên kết giải thích đúng chi tiết, nhưng hãy xem IEnumerable.GetEnumerator()
).
Resharper thấy điều này và đề xuất bạn lưu trữ kết quả của việc liệt kê GetNames()
trong một biến cục bộ, ví dụ bằng cách cụ thể hóa nó trong một danh sách:
IEnumerable fooEnumerated = GetNames().ToList();
Điều này sẽ đảm bảo rằng GetNames()
kết quả chỉ được liệt kê một lần, miễn là bạn tham khảo fooEnumerated
.
Điều này rất quan trọng vì bạn thường chỉ muốn liệt kê một lần, chẳng hạn như khi GetNames()
thực hiện một lệnh gọi cơ sở dữ liệu (chậm).
Bởi vì bạn đã cụ thể hóa các kết quả trong một danh sách, việc bạn liệt kê fooEnumerated
hai lần không còn quan trọng nữa ; bạn sẽ lặp lại danh sách trong bộ nhớ hai lần.