1

オブザーバーのフィルターを時間をかけて改良しようとしていますが、これを行う最善の方法は何なのか疑問に思っていました。

例えばmyObservable.Where(x=>x.Color=="red").Subscribe();

その後myObservable.Where(x=>x.Color=="blue").Subscribe();

次に、2 つを 1 つのストリームにマージして、OnNext()Red OR Blue オブザーバブルで呼び出されるようにします。

たぶん、私に何が起こっているのかを完全にはクリックしていません。

私も持っているとどうなりますかmyObservable.Where(x=>x.Type=="Car").Subscribe();。毎回同じ OnNext() メソッドを呼び出し続けますか? これは私にとって何の役に立ちますか..更新を呼び出すサブスクリプションに応じて異なる反応をしたいかもしれませんが、同時にサブスクリプションをフラットにしたいかもしれません。

例: 上記のシナリオで、色が赤の場合は「新しい赤いオブジェクト」と書きたい、車の場合は「新しい車」と書きたい。Rxでこれを行うにはどうすればよいですか? OnNext、OnError などのサブスクライブにはオーバーロードがありますが、それにはオブザーバーも監視可能である必要があります (サブジェクト)。間違っている場合は修正してください。

これは私には意味がありません..変化を観察しているものも観察可能である必要があるのはなぜですか?

4

2 に答える 2

1

これはどう?

myObservable.Where(x=>x.Color=="red" || x.Color == "blue").Subscribe(x=>Console.WriteLine("new {0} object", x.Color));
myObservable.Where(x=>x.Type=="Car").Subscribe(x=>Console.WriteLine("new car"));

ジェフリー

于 2010-07-13T17:07:09.337 に答える
0

まず、サブジェクトは、他のオブザーバブルを観察したことに応じて生成されるオブザーバブルです。これらは、状況によっては「配管」として役立ち、チャネルを介して通信する「エージェント」の形式を構築するために使用することもできます。

あなたの主な質問について: Subscribe の例では、 Observer を購読する必要があるものを省略しているため、クリックされていない可能性があると思います - それは ...Subscribe() ではなく、 ...Subscribe( でなければなりません観察者)。

あなたの質問に対する答えの 1 つは、同じオブザーバーを複数のオブザーバブルにサブスクライブできるということです。または、Merge を使用することもできます。それらを区別できるようにしたい場合、最も簡単な方法は、観察する 2 つのサブジェクトを用意し、その種類のことを特定してから、観察を先に渡してマージすることです。または、Select を使用して、観測を結合する前に観測にタグを付けることができます。

于 2010-07-29T10:39:05.993 に答える