public delegate TResult Func (); public delegate void GeneratorNext (ref T current); public class GeneratorEnumerable { public GeneratorEnumerable (Func> next) { } } public class GeneratorExpression { } public class GeneratorInvoker { public GeneratorInvoker (GeneratorExpression generator) { } public void Invoke (ref T current) { } } public static class Interpreter { public static object InterpretGenerator (GeneratorExpression generator) { return new GeneratorEnumerable ( () => new GeneratorInvoker (generator).Invoke ); } public static int Main () { InterpretGenerator (new GeneratorExpression ()); return 0; } }