c#中的observable有if/then/else运算符吗?

Dan*_*ler 6 .net c# system.reactive

有没有人知道这个手工 if/then/else运算符的适当替代品用于反应式扩展(.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));
}
Run Code Online (Sandbox Code Playgroud)

用法示例(假设numbers类型为IObservable<int>:

numbers.If(
  predicate: i => i % 2 == 0,
  thenSource: i => Observable
    .Return(i)
    .Do(_ => { /* some side effects */ })
    .Delay(TimeSpan.FromSeconds(1)), // some other operations
  elseSource: i => Observable
    .Return(i)
    .Do(_ => { /* some other side effects */ }));
Run Code Online (Sandbox Code Playgroud)

Met*_*lon 3

是的,有一个: https: //github.com/Reactive-Extensions/Rx.NET/blob/develop/Rx.NET/Source/src/System.Reactive/Linq/Observable/If.cs

但为什么不使用你自制的版本呢?它似乎对我来说效果很好。

遗憾的是,据我所知,.Net 中没有用于此任务的内置运算符。