Есть ли какой-либо способ в блоке итератора C#, чтобы обеспечить блок кода, который будет запускаться, когда конец foreach (естественно, из-за того, что он разбит), скажем, чтобы очистить ресурсы?«И окончательно» Блок в итераторах
Лучшее, что я придумал, это использовать конструкцию using, которая хороша, но для очистки требуется класс IDisposable. Например:
public static IEnumerable<string> ReadLines(this Stream stream)
{
using (StreamReader rdr = new StreamReader(stream))
{
string txt = rdr.ReadLine();
while (txt != null)
{
yield return txt;
txt = rdr.ReadLine();
}
rdr.Close();
}
}