TeamCity.CSharpInteractive/LinesEnumerator.cs (27 lines of code) (raw):
namespace TeamCity.CSharpInteractive;
using System.Collections;
internal class LinesEnumerator : IEnumerator<string>
{
private readonly IEnumerator<string> _baseEnumerator;
private readonly Action _onDispose;
public LinesEnumerator(IEnumerable<string> enumerable, Action onDispose)
{
_baseEnumerator = enumerable.GetEnumerator();
_onDispose = onDispose;
}
public bool MoveNext() => _baseEnumerator.MoveNext();
public void Reset() => _baseEnumerator.Reset();
public string Current => _baseEnumerator.Current;
object? IEnumerator.Current => ((IEnumerator)_baseEnumerator).Current;
public void Dispose()
{
try
{
_baseEnumerator.Dispose();
}
finally
{
_onDispose();
}
}
}