C#:在哪里实现自定义IEnumerator <T>

Svi*_*ish 2 c# ienumerable ienumerator

假设我有一个实现的类IEnumerable<T>.它目前yieldGetEnumerator()方法中使用关键字.但是现在我需要做更多的事情,例如我想在自己之后进行清理.要做到这一点,除非我忽略了任何事情,否则我需要实现IEnumerator<T>界面.但是你会说我应该在那里做什么?

该类本身应该实现并GetEnumerator()返回this吗?或者将它隐藏在私人课堂中会更好吗?或者它应该只是一个完全不同的类?对此有哪些常见做法?

ang*_*son 6

如果您需要做的就是在枚举器被丢弃时清理一些资源,比如在foreach循环结束时,那么你可以用你拥有的东西来做,只需在你的迭代器方法中添加一个try/finally块.

像这样:

public IEnumerator<T> GetEnumerator()
{
    try
    {
        // your iterator code here
    }
    finally
    {
        // cleanup code here
    }
}
Run Code Online (Sandbox Code Playgroud)

这里的所有都是它的.