c# - IEnumerable 跳过并获取

标签 c# generics

我有一个自定义控件,其数据源类型为 IEnumerable(非通用)。现在我想在数据源上实现分页,所以我需要像List-of-T 有的Skip 和Take 之类的东西。现在我正在使用以下内容:

List<object> pagingList = DataSource.Cast<object>().ToList()

这可能效率不高,我猜,所以我正在寻找一种更好的方法来做到这一点。使用两个计数器枚举集合、跳过元素等可能更有效,但它太丑陋了,我只是不想这样做。但也许这是最好的选择?

最佳答案

你为什么调用 ToList() ?您可以使用 SkipTake没有那个:

IEnumerable<object> paged = DataSource.Cast<object>()
                                      .Skip(page * pageSize)
                                      .Take(pageSize);

这将节省将整个数据源转换为列表的时间 - 但它确实意味着当源不是 IList<T> 时您无法有效地跳过.

不过有两个重要问题:

  • 您提到您猜测您的原始代码效率低下...您测量过吗?这个数据有多大,它在内存中的形式是什么?你还用它做什么?这真的是一个瓶颈吗?收集事实而不是猜测。
  • 如果您拥有通用数据源,则可以更轻松地以各种方式使用您的数据...这是您可以实现的目标吗?

关于c# - IEnumerable 跳过并获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13678330/

相关文章:

java - 在 Java 源代码中使用泛型的力量

c# - EWS : Accessing an appointments recurrence pattern

C# 多线程循环整个数据表,同时将线程限制为 4

c# - 从通用列表创建通用字典

对具有无界通配符类型的方法参数使用泛型 lambda 的 Java 编译错误

c# - 我应该如何在通用类/表单中使用变量?

c# - 在 C# 中使用其他数组的内容创建新数组

c# - 使用NEST进行 Elasticsearch -调试和浏览器模式下的结果不同

c# - Xamarin 删除 TableSection 顶部边框

ios - 在 Swift 中将 nil 分配给泛型可选值