c# - 将 IEnumerator 转换为通用 IEnumerator 的最佳方法是什么?

标签 c# enumeration ienumerator

我正在为 C#.NET 3.5 中的自定义 ConfigurationHandler 编写自定义 ConfigurationElementCollection,我想将 IEnumerator 公开为通用 IEnumerator。

实现此目标的最佳方法是什么?

我目前使用的代码:

public new IEnumerator<GenericObject> GetEnumerator()
{
  var list = new List();
  var baseEnum = base.GetEnumerator();
  while(baseEnum.MoveNext())
  {
    var obj = baseEnum.Current as GenericObject;
    if (obj != null)
      list.Add(obj);
  }
  return list.GetEnumerator();
}

干杯

最佳答案

我不相信框架里有任何东西,但你可以很容易地写一个:

IEnumerator<T> Cast<T>(IEnumerator iterator)
{
    while (iterator.MoveNext())
    {
        yield return (T) iterator.Current;
    }
}

很想调用 Enumerable.Cast<T>从 LINQ 然后调用 GetEnumerator()结果 - 但如果你的类(class)已经实现了 IEnumerable<T>T是一个值类型,充当空操作,所以 GetEnumerator()调用递归并抛出一个 StackOverflowException .使用安全return foo.Cast<T>.GetEnumerator();什么时候foo绝对是一个不同的对象(它不会委托(delegate)回这个对象),但除此之外,您最好还是使用上面的代码。

关于c# - 将 IEnumerator 转换为通用 IEnumerator 的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/828342/

相关文章:

c# - ASP.NET MVC Controller 单元测试 - UrlHelper 扩展问题

c# - 在 xamarin for android 中更改字体时出错

mysql - 在 MySQL 中使用指示列按顺序、分组和按日期枚举记录

php - MySQL:在组内枚举(Banana、1/Banana、2/Banana、3/Apple、1 ...)

c# - 为什么 List<T> 声明 GetEnumerator() 和 IEnumerable<T>.GetEnumerator()?

c# - 计算通过所有点的曲线

c# Entity Framework 抛出异常但不回滚数据库

Java 枚举方法 - 返回相反方向的枚举

c# - 等到协程完成后再启动另一个协程 [Unity C#]

C#:在何处实现自定义 IEnumerator<T>