using System; using System.Collections; using System.Collections.Generic; using System.Security.AccessControl; using System.Text; namespace Apewer { /// public sealed class Enumerator : IEnumerator, IEnumerator, IDisposable { // 类的状态 bool _disposed = false; string _type; // 元素获取 Func> _getter = null; // 迭代器 int _index = 0; T _current = default; #region IDisposable /// public void Dispose() { _disposed = true; } #endregion #region IEnumerator /// public T Current { get { if (_disposed) throw new ObjectDisposedException(_type); return _current; } } #endregion #region IEnumerator /// object IEnumerator.Current { get => Current; } /// public bool MoveNext() { if (_disposed) throw new ObjectDisposedException(_type); var value = _getter(_index); if (value == null) return false; _current = value.Value; _index++; return true; } /// public void Reset() { if (_disposed) throw new ObjectDisposedException(_type); _current = default; _index = 0; } #endregion /// 创建枚举器实例。 /// 元素获取程序。传入参数为索引值,从 0 开始;枚举结束后应返回 NULL 值。 /// public Enumerator(Func> getter) { if (getter == null) throw new ArgumentNullException(nameof(getter)); _getter = getter; _type = GetType().Name; Reset(); } } }