5

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

4

3 回答 3

9

你有几个选择:

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

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

    IEnumerator enumerator = enumerable.GetEnumerator();
    enumerator.MoveNext();
    object first = enumerator.Current;
    
于 2013-07-18T12:06:51.357 回答
1

您在这里有两个选择:

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

  2. 使用GetEnumerator()为您提供IEnumerator. 从这里您可以遍历集合。从 开始MoveNext(),您可以使用该Current属性来获取第一个元素。

编辑: 安德烈领先于我。

于 2013-07-18T12:11:11.867 回答
1

看看这个示例代码很简单

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

于 2013-07-18T12:12:11.083 回答