Как я не смог подать Microsoft идею
Dec. 28th, 2009 12:00 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Bart de Smet пишет о новой Reactive Framework, которая войдёт в .NET 4.0 (очень интересная и полезная библиотека, кстати; и многие идеи взяты опять-таки из ФП, а точнее из Functional Reactive Programming).
В своём последнем посте он упомянул комбинатор
и пример использования
Я заметил, что практически при любом использовании этого метода пришлось бы в
Вот только оказалось, что в последней версии это изменение уже сделали.
В своём последнем посте он упомянул комбинатор
Using
, служащий для выделения ресурса и его освобождения после завершения работы с последовательностью. Как известно, в .NET все ресурсы, которые нужно освобождать, должны реализовать интерфейс IDisposable
. В первой версии поста была приведена сигнатураpublic static IEnumerable<TSource> Using<TSource>(Func<IDisposable> resourceSelector, Func<IDisposable, IEnumerable<TSource>> resourceUsage);
и пример использования
EnumerableEx.Using<int>(() => new ActionDisposable(() => Console.WriteLine("Gone")), a => { // Now we could be using a to get data back... Console.WriteLine(a is ActionDisposable); // ... but let's just return some stock data. return new[] { 1, 2, 3 }; }) .Run(Console.WriteLine);
Я заметил, что практически при любом использовании этого метода пришлось бы в
resourceUsage
приводить тип ресурса, и предложил заменить сигнатуру наpublic static IEnumerable<TSource, TResource> Using<TSource>(Func<TResource> resourceSelector, Func<TResource, IEnumerable<TSource>> resourceUsage) where TResource : IDisposable;
Вот только оказалось, что в последней версии это изменение уже сделали.