C#:在那里实现一个自定义IEnumerator<T>
-
19-09-2019 - |
题
说我有一个类实现了 IEnumerable<T>
.它目前使用的 yield
关键字 GetEnumerator()
法。但现在我需要做更多,例如我想到后清理自己。要做到这一点,除非我忽略了任何东西,我需要执行 IEnumerator<T>
接口。但在这里,你会说我应该做的吗?
应该类本身实现它, GetEnumerator()
返回 this
?或者会不会更好把它藏在一个私人类?或者也许只是一个完全不同的课吗?什么是一些共同的做法这个吗?
解决方案
如果你需要做的,当枚举数在foreach
循环结束时处理掉,像正在清理一些资源,那么你就可以做到这一点,你有什么,只需添加一个try / finally块到你的迭代器方法
像这样:
public IEnumerator<T> GetEnumerator()
{
try
{
// your iterator code here
}
finally
{
// cleanup code here
}
}
这是所有有给它。
其他提示
我会去与用于IEnumerator的
你可能不需要编写课本。一个迭代方法可以返回 IEnumerable<T>
, 所以如果你的班级仅需要实现 IEnumerable<T>
并没有别的,只是写一个迭代方法用于整个事情。
如果不,你必须坚持有一个外流,实现了 IEnumerable<T>
通过具有一个迭代方法来做 GetEnumerator
, 然后你不必做任何事情非常困难的清理后的迭代。
IEnumerator<T>
来自 IDisposable
.一个迭代方法实现了 Dispose
通过执行 finally
块或任何代码之后的最后 yield return
.
不隶属于 StackOverflow