// Needed for NET40 #if !NET_4_6 using System; using LinqInternal.Core; namespace LinqInternal.Collections { internal static class ObservableExtensions { public static IDisposable SubscribeAction(this IObservable observable, Action listener) { if (observable == null) { throw new ArgumentNullException("observable"); } return observable.Subscribe(listener.ToObserver()); } public static IDisposable SubscribeAction(this IObservable observable, Action listener, Func converter) { if (observable == null) { throw new ArgumentNullException("observable"); } return observable.Subscribe(listener.ToObserver(converter)); } public static IDisposable SubscribeConverted(this IObservable observable, IObserver observer, Func converter) { if (observable == null) { throw new ArgumentNullException("observable"); } return observable.Subscribe(new ConvertedObserver(observer, converter)); } public static IDisposable SubscribeFiltered(this IObservable observable, IObserver observer, Predicate filter) { if (observable == null) { throw new ArgumentNullException("observable"); } return observable.Subscribe(new FilteredObserver(observer, filter)); } public static IDisposable SubscribeFilteredConverted(this IObservable observable, IObserver observer, Predicate filter, Func converter) { if (observable == null) { throw new ArgumentNullException("observable"); } return observable.Subscribe(new FilteredConvertedObserver(observer, filter, converter)); } public static IObserver ToObserver(this Action listener) { if (listener == null) { throw new ArgumentNullException("listener"); } return new CustomObserver(listener); } public static IObserver ToObserver(this Action listener, Func converter) { if (converter == null) { throw new ArgumentNullException("converter"); } if (listener == null) { throw new ArgumentNullException("listener"); } return new CustomObserver(input => listener(converter(input))); } } } #endif