2017-04-11 7 views
5

क्या किसी को इस हस्तनिर्मित के लिए उचित प्रतिस्थापन के बारे में पता है यदि/या/अन्य प्रतिक्रियाशील एक्सटेंशन (.Net/C#) के लिए ऑपरेटर है?क्या सी # उपलब्ध में अवलोकन के लिए कोई if/then/else ऑपरेटर है?

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

इस तरह? https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/if.md ... opps, जेएस क्षमा करें, सी # के बजाय। – AndyJ

+0

यहां सी # संस्करण है: https://github.com/Reactive-Extensions/Rx.NET/blob/develop/Rx.NET/Source/src/System.Reactive/Linq/Observable/If.cs – AndyJ

+1

हाँ, लेकिन यह एक 'आंतरिक' है। –

उत्तर

3

हाँ वहाँ एक है:

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)); 
} 

प्रयोग उदाहरण (numbers संभालने प्रकार IObservable<int> की है? https://github.com/Reactive-Extensions/Rx.NET/blob/develop/Rx.NET/Source/src/System.Reactive/Linq/Observable/If.cs

लेकिन क्यों अपने selfmade संस्करण का उपयोग नहीं करते यह काफी अच्छी तरह से काम करने लगता है मेरे लिए।

दुख की बात है, जहां तक ​​मुझे पता है, इस कार्य के लिए ऑपरेटर में कोई निर्माण नहीं है। नेट

+1

यह कार्यान्वयन 'आंतरिक' लगता है; मुझे सार्वजनिक 'if' एक्सटेंशन विधि नहीं मिल सका। –

संबंधित मुद्दे