如何将 IObservable<A> 转换为 IObservable<B>。

3

我有一个方法返回接口IObservable<A>(在silverlight中),我希望将其转换为另一个IObservable<B>

那么,在'CONVERT_SOME_HOW'的位置上我需要放什么呢?

public IObservable<Bar> Get(IEnumerable<object> @params)
{

    IObservable<Foo> fooObservable = _resources.Get(@params);
    IObservable<Bar> barObservable = CONVERT_SOME_HOW(fooObservable);

    return barObservable;
}

如何将 Foo 转换为 Bar - Gabe
2个回答

7

与在LINQ to Objects中一样,使用投影:

var observableB = observableA.Select(a => new B(a));

(显然,根据您的转换进行调整。)
假设我正确理解了问题。 "当第一个观察者的订阅被执行" 这句话并不是很清楚你的意思。

@AWC:好的,那没问题 - 你只需要提供 FooBar 之间的转换即可。 - Jon Skeet
这个问题我有点看不清楚,需要再仔细思考一下 :) - AwkwardCoder

0
正如Jon所建议的那样,如果你有从AB的转换,那么你可以使用Select
然而,还有一种可能性,即你有从AIObservable<B>的转换,在这种情况下,你可以使用SelectMany:
var observableB = observableA.SelectMany(a => GetObservableB(a));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接