Does anyone know of a suitable replacement for this handmade if / then / else statement for reactive extensions (.Net / C #)?
public static IObservable<TResult> If<TSource, TResult>( this IObservable<TSource> source, Func<TSource, bool> predicate, Func<TSource, IObservable<TResult>> thenSource, Func<TSource, IObservable<TResult>> elseSource) { return source .SelectMany( value => predicate(value) ? thenSource(value) : elseSource(value)); }
Usage example (it is assumed that numbers is of type IObservable<int> :
numbers.If( predicate: i => i % 2 == 0, thenSource: i => Observable .Return(i) .Do(_ => { }) .Delay(TimeSpan.FromSeconds(1)),
source share