私は、観察可能なシーケンスを別々のシーケンスに分割して、与えられた述語に基づいて独立して処理できる方法を探しています。私が思い付くことができました最も近い2つのwhere
のフィルタをやっているC#のobservablesを分割する
var (evens, odds) = observable.Partition(x => x % 2 == 0);
var strings = evens.Select(x => x.ToString());
var floats = odds.Select(x => x/2.0);
が、それは、私は野生ではないよこれ、状態を評価し、二回ソースシーケンスを処理する必要があります。このような何かが理想的です約。
observable = observable.Publish().RefCount();
var strings = observable.Where(x => x % 2 == 0).Select(x => x.ToString());
var floats = observable.Where(x => x % 2 != 0).Select(x => x/2.0);
F#がObservable.partition<'T>とObservable.split<'T,'U1,'U2>で、このための良いサポートを持っているようだが、私は、C#のための同等の何かを見つけることができていませんでした。
あなたは常にF#のライブラリに引っ張るとC# –
探しからそれを使用することができますF#のソースコードでは、ソースストリームに2つのフィルタを実際に適用するように見えるので、基本的に2つの 'wheres'を持つ私の提案と同じです。 – spencercw