Like so? I haven't really changed much here, except the constructor usage...

    static void Main()
        var q = from d in System.Linq.Enumerable.Range(0, 10)
                select new Disposable(d);
    //  alternatively:
    //  var q = System.Linq.Enumerable.Range(0, 10)
    //          .Select(d => new Disposable(d));

        foreach(var item in q)
    public static IEnumerable<R> Select<T, R>(
        this IEnumerable<T> list, Func<T, R> selector) where R : IDisposable
        foreach (var item in list)
            using (var disposable = selector(item))
                yield return disposable;

However! The thing to watch here is that we don't introduce any conflicting LINQ operations.

Related Query

More Query from same tag