如何获取IEnumerable(非泛型)的第一个元素?

时间:2013-07-18 11:55:19

标签: c#

如果我有通用IEnumerable<int>。我可以简单地将ToList()ToArray()FirstOrDefault()应用于此。如何将这些方法应用于非通用IEnumerable

3 个答案:

答案 0 :(得分:7)

您有几种选择:

  1. 如果您知道可枚举中的所有对象属于同一类型,则可以将其强制转换为通用IEnumerable<YourType>。在最坏的情况下,您始终可以使用object

    object first = enumerable.Cast<object>().First();
    
  2. 或者您可以使用枚举器,执行一步并获取当前元素:

    IEnumerator enumerator = enumerable.GetEnumerator();
    enumerator.MoveNext();
    object first = enumerator.Current;
    

答案 1 :(得分:1)

这里有两个选项:

  1. 按照@Danier Gimenez建议的问题并使用Cast<TResult>方法。在演员之后,您将获得一个通用枚举,您可以在其上应用First()方法。这也是最简单的实现。

  2. 使用GetEnumerator()方法为您提供IEnumerator。从这里你可以迭代收集。从MoveNext()开始,您可以使用Current属性获取第一个元素。

  3. 修改 安德烈领先于我。

答案 2 :(得分:1)

这很简单 看一下这个示例代码

IEnumerable集合; ---在这里填写收藏--- collection.OfType()。ToList()或collection.OfType()。ToArray collection.OfType()。ToList()或collection.OfType()。ToArray() 它过滤(int / MyClass)类型对象并将其转换为列表或数组