using System.Collections.Generic; using System.Linq; using System; using System.Collections; namespace Octokit.AsyncPaginationExtension { internal class LazyList : IReadOnlyList { private readonly Func _generator; private readonly List _list = new(); public LazyList(Func generator) { _generator = generator; } public IEnumerator GetEnumerator() { var i = 0; while (true) yield return this[i++]; } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } public int Count => int.MaxValue; public T this[int index] { get { if (_list.Count <= index) _list.AddRange(Enumerable.Repeat(default, index - _list.Count + 1)); return _list[index] ??= _generator(index); } } } }