zon*_*lut 31 c# ienumerator enumeration
我正在为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();
}
干杯
Jon*_*eet 52
我不相信框架中有任何内容,但您可以轻松地编写一个:
IEnumerator<T> Cast<T>(IEnumerator iterator)
{
while (iterator.MoveNext())
{
yield return (T) iterator.Current;
}
}
Run Code Online (Sandbox Code Playgroud)
Enumerable.Cast<T>从LINQ 调用然后调用GetEnumerator()结果很诱人- 但是如果你的类已经实现IEnumerable<T>并且T是一个值类型,那么它就像一个no-op,所以GetEnumerator()调用recurses并抛出一个StackOverflowException.return foo.Cast<T>.GetEnumerator();当foo它绝对是一个不同的对象(它不会委托给这个对象)时使用是安全的,但除此之外,你可能最好使用上面的代码.
| 归档时间: |
|
| 查看次数: |
25409 次 |
| 最近记录: |