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)
是的,有一个: https: //github.com/Reactive-Extensions/Rx.NET/blob/develop/Rx.NET/Source/src/System.Reactive/Linq/Observable/If.cs
但为什么不使用你自制的版本呢?它似乎对我来说效果很好。
遗憾的是,据我所知,.Net 中没有用于此任务的内置运算符。
| 归档时间: |
|
| 查看次数: |
595 次 |
| 最近记录: |