簡體   English   中英

IEnumerable跳過並采取

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM