Iterator Library for C# and Unity
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


  • A no-GC version of C#'s IEnumerator<T> and LINQ
  • Inspired by C++'s <iterator> and <algorithm> headers
  • Useful for any C# project with additional support for Unity

Getting Started

Unity Projects

Clone or download this repository and copy the JacksonDunstanIterator directory somewhere inside your Unity project's Assets directory.

Non-Unity Projects

Clone or download this repository and add all the .cs files directly under the JacksonDunstanIterator directory to your C# project.


There are three iterator types:

  • ArrayIterator<T> for managed arrays (T[])
  • ListIterator<T> for List<T>
  • NativeArrayIterator<T> for NativeArray<T> (automatically compiled out when Unity 2018.1+ isn't available)

They all have the same API. Here's the basics of using ArrayIterator<T>:

// Get an array
int[] array = new [] { 30, 10, 20, 40 };

// Get an iterator to the beginning of the array
ArrayIterator<int> begin = array.Begin();

// Get the value of the iterator
int val = begin.GetCurrent();

// Move to the next element
ArrayIterator<int> second = begin.GetNext();

// Get an iterator to one past the end of the array
ArrayIterator<int> end = array.End();

// Reverse [ 10, 20, 40] so the array is [ 30, 40, 20, 10 ]

// Search for an element satisfying a condition
ArrayIterator<int> it20 = begin.FindIf(end, e => e < 25);

There is much more functionality available. See the source for more.

To read about the making of this library, see the Enumerables Without the Garbage series: