如果我有通用IEnumerable<int>
。我可以简单地将ToList()
或ToArray()
或FirstOrDefault()
应用于此。如何将这些方法应用于非通用IEnumerable
?
答案 0 :(得分:7)
您有几种选择:
如果您知道可枚举中的所有对象属于同一类型,则可以将其强制转换为通用IEnumerable<YourType>
。在最坏的情况下,您始终可以使用object
:
object first = enumerable.Cast<object>().First();
或者您可以使用枚举器,执行一步并获取当前元素:
IEnumerator enumerator = enumerable.GetEnumerator();
enumerator.MoveNext();
object first = enumerator.Current;
答案 1 :(得分:1)
这里有两个选项:
按照@Danier Gimenez建议的问题并使用Cast<TResult>
方法。在演员之后,您将获得一个通用枚举,您可以在其上应用First()
方法。这也是最简单的实现。
使用GetEnumerator()
方法为您提供IEnumerator
。从这里你可以迭代收集。从MoveNext()
开始,您可以使用Current
属性获取第一个元素。
修改强> 安德烈领先于我。
答案 2 :(得分:1)
IEnumerable集合; ---在这里填写收藏--- collection.OfType()。ToList()或collection.OfType()。ToArray collection.OfType()。ToList()或collection.OfType()。ToArray() 它过滤(int / MyClass)类型对象并将其转换为列表或数组