IEnumerator< T > inherits from the non-generic IEnumerator and IDisposable. In order to satisfy IDisposable's requirments, you must create a destructor in your derived class. Also, since C++/CLI does not overload methods by signature, I used Named Virtual Overriding on Object^ Current get property to satisfy the compiler.
The array<T> and List<T> classes use the Predicate<T> delegate that represents a function or method used for filtering data. In C++/CLI, I have found a little trick where you can pass in your limiting values into any of the above classes' methods that require this delegate in one line: