Ich suche nach einer Möglichkeit, eine beobachtbare Sequenz in separate Sequenzen aufzuspalten, die ich basierend auf einem gegebenen Prädikat unabhängig verarbeiten kann. So etwas wie dies wäre ideal:Partitionieren von Observablen in C#
var (evens, odds) = observable.Partition(x => x % 2 == 0);
var strings = evens.Select(x => x.ToString());
var floats = odds.Select(x => x/2.0);
Der nächstgelegene ich habe in der Lage zu kommen mit tut zwei where
Filter, aber das erfordert die Bedingung Auswertung und Verarbeitung der Quellsequenz zweimal, was ich nicht bin wild Über.
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 # scheint dies mit Observable.partition<'T> und Observable.split<'T,'U1,'U2> gute Unterstützung zu haben, aber ich habe nicht in der Lage gewesen, etwas Äquivalent für C# zu finden.
Sie können immer in der # Bibliothek F ziehen und es verwenden, von C# –
Suchen Im Quellcode von F # sieht es so aus, als würde es nur zwei Filter auf den Quelldatenstrom anwenden, so dass es im Grunde genommen dasselbe ist wie mein Vorschlag mit zwei 'wheres'. – spencercw