Svi*_*ish 2 c# ienumerable ienumerator
假设我有一个实现的类IEnumerable<T>
.它目前yield
在GetEnumerator()
方法中使用关键字.但是现在我需要做更多的事情,例如我想在自己之后进行清理.要做到这一点,除非我忽略了任何事情,否则我需要实现IEnumerator<T>
界面.但是你会说我应该在那里做什么?
该类本身应该实现并GetEnumerator()
返回this
吗?或者将它隐藏在私人课堂中会更好吗?或者它应该只是一个完全不同的类?对此有哪些常见做法?
如果您需要做的就是在枚举器被丢弃时清理一些资源,比如在foreach
循环结束时,那么你可以用你拥有的东西来做,只需在你的迭代器方法中添加一个try/finally块.
像这样:
public IEnumerator<T> GetEnumerator()
{
try
{
// your iterator code here
}
finally
{
// cleanup code here
}
}
Run Code Online (Sandbox Code Playgroud)
这里的所有都是它的.