2017-04-11 13 views
5

Có ai biết thay thế thích hợp cho số thủ công nếu/sau đó/người điều hành khác cho tiện ích mở rộng phản hồi (.Net/C#) không?Có một toán tử if/then/else cho các quan sát trong C# có sẵn không?

public static IObservable<TResult> If<TSource, TResult>(
    this IObservable<TSource> source, 
    Func<TSource, bool> predicate, 
    Func<TSource, IObservable<TResult>> thenSource, 
    Func<TSource, IObservable<TResult>> elseSource) 
{ 
    return source 
    .SelectMany(
     value => predicate(value) 
     ? thenSource(value) 
     : elseSource(value)); 
} 

Cách sử dụng ví dụ (giả sử numbers là loại IObservable<int>:

numbers.If(
    predicate: i => i % 2 == 0, 
    thenSource: i => Observable 
    .Return(i) 
    .Do(_ => { /* some side effects */ }) 
    .Delay(TimeSpan.FromSeconds(1)), // some other operations 
    elseSource: i => Observable 
    .Return(i) 
    .Do(_ => { /* some other side effects */ })); 
+0

Như thế này? https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/if.md ... opps, đó là JS xin lỗi, thay vì C#. – AndyJ

+0

Đây là phiên bản C#: https://github.com/Reactive-Extensions/Rx.NET/blob/develop/Rx.NET/Source/src/System.Reactive/Linq/Observable/If.cs – AndyJ

+1

Có, nhưng điều này một là 'nội bộ'. –

Trả lời

3

Có có một: https://github.com/Reactive-Extensions/Rx.NET/blob/develop/Rx.NET/Source/src/System.Reactive/Linq/Observable/If.cs

Nhưng tại sao không sử dụng phiên bản selfmade của bạn Có vẻ như để làm việc khá tốt

Đáng buồn là có, theo như tôi biết, không xây dựng trong nhà điều hành cho nhiệm vụ này trong .Net

+1

Triển khai này có vẻ là 'nội bộ'; Tôi không thể tìm thấy phương thức 'If' công khai. –

Các vấn đề liên quan