1

当将 CombineLatest 与不同类型的 IObservables 一起使用时,我目前正在使用一个选择器函数,该函数只是简单地传递元组,因此我可以在订阅方法中使用它。

IObservable<bool> obsBool;
IObservable<int?> obsInt;

obsBool
    .CombineLatest(obsInt, (b,i)=>(b,i)
    .Subscribe(t => doSomething(t.b, t.i));

这可以简化以摆脱简化选择器功能吗?(什么都不做)

4

1 回答 1

3

您可以创建一个扩展方法,尽管您会丢失简单的名称:

void Main()
{
    IObservable<bool> obsBool = null;
    IObservable<int?> obsInt = null;
    Action<bool, int?> doSomething = null;

    obsBool
        .CombineLatest(obsInt)
        .Subscribe(t => doSomething(t.Item1, t.Item2));
}

public static class X
{
    public static IObservable<(T1, T2)> CombineLatest<T1, T2>(this IObservable<T1> o1, IObservable<T2> o2)
    {
        return o1.CombineLatest(o2, (t1, t2) => (t1, t2));
    }
}
于 2018-12-20T15:34:22.160 回答