我正在为 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/