我有一个自定义控件,其数据源类型为 IEnumerable(非通用)。现在我想在数据源上实现分页,所以我需要像List-of-T 有的Skip 和Take 之类的东西。现在我正在使用以下内容:
List<object> pagingList = DataSource.Cast<object>().ToList()
这可能效率不高,我猜,所以我正在寻找一种更好的方法来做到这一点。使用两个计数器枚举集合、跳过元素等可能更有效,但它太丑陋了,我只是不想这样做。但也许这是最好的选择?
最佳答案
你为什么调用 ToList()
?您可以使用 Skip
和 Take
没有那个:
IEnumerable<object> paged = DataSource.Cast<object>()
.Skip(page * pageSize)
.Take(pageSize);
这将节省将整个数据源转换为列表的时间 - 但它确实意味着当源不是 IList<T>
时您无法有效地跳过.
不过有两个重要问题:
- 您提到您猜测您的原始代码效率低下...您测量过吗?这个数据有多大,它在内存中的形式是什么?你还用它做什么?这真的是一个瓶颈吗?收集事实而不是猜测。
- 如果您拥有通用数据源,则可以更轻松地以各种方式使用您的数据...这是您可以实现的目标吗?
关于c# - IEnumerable 跳过并获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13678330/