 <p>Why not to convert your pseudo-code to real code?</p> <pre><code>public static class MyExtensions { public static IEnumerable&lt;T&gt; RunMeOnEachItemLater(this IEnumerable&lt;T&gt; sequence, Action&lt;T&gt; action) { foreach(T item in sequence) { action(item); yield return item; } } } </code></pre> <p>Now you can execute custom function for each item later using LINQ deferred execution:</p> <pre><code>IEnumerable&lt;BaseModel&gt; l = Cache[type].Data.Cast&lt;BaseModel&gt;() .RunMeOnEachItemLater(m =&gt; m.Init()); </code></pre>