2011-09-26 22 views
2

我得到了Foo,BarBaz類型的IObservable。此外,有一個定義爲一個方法:使用來自IObservable的最新值

void DoWork(Foo foo); 

IObservable在別處定義爲SubjectOnNext被稱爲不時。

只要有新的數據可用(由某些Where查詢定義),我想調用DoWork方法以及最新的Foo值。如果沒有生成Foo值,則不應調用該方法。

最簡單的方法是什麼?

更具體一些,請看下面的例子。我想打電話DoWorkbarbaz變化,與最新的foof.id == 1):

void Wire(IObservable<Foo> foo, IObservable<Bar> bar, IObservable<Baz> baz) 
{ 
    foo.Where(f => f.Id == 1) 
     .Subscribe(f => DoWork(f)); 
} 
+0

而IObservable和流之間的關係/交互是... –

+0

請參閱我的關於Subject和OnNext的編輯。沒什麼太花哨的 – kshahar

+0

你的意思是你想在* * bar或baz'改變時調用'DoWork()'? – svick

回答

1

這適用於me:

var ubar = bar.Select(x => Unit.Default); 
var ubaz = baz.Select(x => Unit.Default); 

ubar.Merge(ubaz) 
    .CombineLatest(foo.Where(f => f.Id == 1), (u, f) => f) 
    .Subscribe(f => DoWork(f)); 
+0

這隻適用於如果最新的富有Id == 1 – kshahar

+1

@kshahar - 是不是你問你的問題? – Enigmativity

0

您可以在Observable class使用Do extension method做到這一點:

IObservable<Foo> filteredList = foos.Where(...); 

// Invoke DoWork on each instance of Foo. 
filteredList.Do(DoWork); 
+0

請參閱我的編輯,這是如何回答我的問題的? – kshahar