using System.Collections.Generic;
using System.Collections;
public static void Main()
var data = new int[] {0,1,2,3,4,5,6,7,8,9};
foreach(var d in data.Where(d => d % 2 == 0)) {Console.WriteLine(d);}
var randomCompilerGeneratedName = new RandomCompilerGeneratedName<int>(data, d => d % 2 == 0);
foreach(var d in randomCompilerGeneratedName) Console.WriteLine(d);
public class RandomCompilerGeneratedName<T> : IEnumerator<T>
public RandomCompilerGeneratedName(IEnumerable<T> items, Func<T, bool> Predicate) {enumerator = items.GetEnumerator();predicate = Predicate;}
private IEnumerator<T> enumerator {get; set;}
private Func<T, bool> predicate {get;set;}
public T Current {get {return enumerator.Current;}}
object IEnumerator.Current
while ( (result = enumerator.MoveNext()) && !predicate(enumerator.Current))
void IDisposable.Dispose() {enumerator.Dispose(); }
public IEnumerator<T> GetEnumerator() {return this;}
public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource,bool> predicate)
foreach (TSource element in source)