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

C# 如何获取IEnumerable(非泛型)的第一个元素?,c#,C#,如果我有一个通用的IEnumerable。我可以简单地对它应用ToList()或ToArray()或FirstOrDefault()。如何将这些方法应用于非泛型的IEnumerable?您有两个选项: 如果知道枚举表中的所有对象都是同一类型的,则可以将其强制转换为泛型IEnumerable。在最坏的情况下,您可以始终使用对象: object first = enumerable.Cast<object>().First(); 这里有两个选项: 遵循@Danier Gimenez建

如果我有一个通用的
IEnumerable
。我可以简单地对它应用
ToList()
ToArray()
FirstOrDefault()
。如何将这些方法应用于非泛型的
IEnumerable

您有两个选项:

  • 如果知道枚举表中的所有对象都是同一类型的,则可以将其强制转换为泛型
    IEnumerable
    。在最坏的情况下,您可以始终使用
    对象

    object first = enumerable.Cast<object>().First();
    

  • 这里有两个选项:

  • 遵循@Danier Gimenez建议的问题,并使用
    Cast
    方法。在强制转换之后,您将获得一个通用枚举,您可以对其应用
    First()
    方法。这也是最简单的实现

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

  • 编辑: 安德烈走在我前面。

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

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

    附加代码,以便更好地帮助您。AFAIK
    IEnumerable
    不是generic@wudzikIEnumerable是IEnumerable接口的实现,该接口位于System.Collections的泛型命名空间中,因此它是泛型的。
    IEnumerator enumerator = enumerable.GetEnumerator();
    enumerator.MoveNext();
    object first = enumerator.Current;