繁体   English   中英

如何.skip()。 IList 上的 take() 元素?

[英]How to .skip() . take() elements on IList?

试过:

IList<T> list= (from ...linq...).ToList();
list = list.Skip(0).Take(10);

但似乎没有这些功能。 还有其他方法可以做到这一点吗?

首先确保您引用的是 System.Linq。

其次,扩展方法使用强类型列表。 所以使用list.OfType<object>().Skip(0).Take(10)

如果您知道列表中的项目属于特定类型,则将 object 替换为该类型。

第三,Skip(0) 是多余的。

此外,您的代码示例正在尝试将 IEnumerable 分配给 IList,您需要在结果中使用 ToList()。

list = list.Skip(0).Take(10).ToList();

你有引用System.Linq吗?

using System.Linq;

这些是在命名空间 System.Linq 中定义的方法扩展。 请务必参考它:

using System.Linq;

SkipTakeIEnumerable<T>的扩展。 当您处理(非通用) IList时,这些将不可用。 但是,如果您知道IList中的类型,那么这应该可以正常工作:

list.OfType<YourType>().Skip(1).Take(10)

这样做的原因是OfType<T>是非泛型IEnumerableIList继承自)的扩展方法并返回泛型IEnumerable<T>

参考: OfType<T>

如果您指的是非泛型IList ,则需要先使用CastOfType获取泛型序列。 如果您希望所有元素都是所需的类型,请使用Cast 如果您想忽略“错误”类型的元素,请使用OfType (我更喜欢Cast尽可能,因为如果我的数据不符合预期,我通常希望得到一个异常。)

例如:

IList list = ...;
var elements = list.Cast<string>()
                   .Skip(10)
                   .Take(20);

您还需要 System.Core 程序集的引用和System.Linqusing指令。

编辑:既然我们知道你有一个IList<T> ,问题就更清楚了。 并不是没有找到 Skip 和 Take ,而是它们没有返回IList<T> 如果您将代码更改为:

IEnumerable<T> list= (from ...linq...).ToList();
list = list.Skip(0).Take(10);

它应该可以正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM