![](/img/trans.png)
[英]How take all elements from IList<object> with [0] index LINQ
[英]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;
Skip
和Take
是IEnumerable<T>
的扩展。 当您处理(非通用) IList
时,这些将不可用。 但是,如果您知道IList
中的类型,那么这应该可以正常工作:
list.OfType<YourType>().Skip(1).Take(10)
这样做的原因是OfType<T>
是非泛型IEnumerable
( IList
继承自)的扩展方法并返回泛型IEnumerable<T>
。
参考: OfType<T>
如果您指的是非泛型IList
,则需要先使用Cast
或OfType
获取泛型序列。 如果您希望所有元素都是所需的类型,请使用Cast
。 如果您想忽略“错误”类型的元素,请使用OfType
。 (我更喜欢Cast
尽可能,因为如果我的数据不符合预期,我通常希望得到一个异常。)
例如:
IList list = ...;
var elements = list.Cast<string>()
.Skip(10)
.Take(20);
您还需要 System.Core 程序集的引用和System.Linq
的using
指令。
编辑:既然我们知道你有一个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.