Есть ли какой-либо способ в блоке итератора 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();
}
}