![](/img/trans.png)
[英]Alternative to IEnumerable<T>.Skip(1).Take(1).Single()
[英]IEnumerable skip and take
我有一個自定義控件,其數據源類型為IEnumerable(非泛型)。 現在我想在數據源上實現分頁,所以我需要像Skip和Take這樣的東西,它有List-of-T。 現在我使用以下內容:
List<object> pagingList = DataSource.Cast<object>().ToList()
我猜這可能效率低下,所以我正在尋找一種更好的方法來做到這一點。 枚舉集合,使用兩個計數器跳過元素等可能會更有效,但它太丑了我只是不想這樣做。 但也許這是最好的選擇?
你為什么要調用ToList()
? 你可以使用Skip
and Take
:
IEnumerable<object> paged = DataSource.Cast<object>()
.Skip(page * pageSize)
.Take(pageSize);
這將節省將整個數據源轉換為列表 - 但它確實意味着當源不是IList<T>
時,您無法有效跳過。
但有兩個重要問題:
考慮到LINQ擴展方法的實現方式,我不認為這樣效率太低。 如果你真的想,你可以為Skip()
和Take()
實現IEnumerable的擴展方法,但我不認為這是必要的。
最好嘗試一種方法,其中代碼對讀取它的人最有意義,然后如果發現它執行不當而返回並更改它,並且分析器說這部分是罪魁禍首。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.