प्रतिक्रियाशील एक्सटेंशन के लिए कस्टम एक्सटेंशन कैसे बनाएं - सी #, .net, एक्सटेंशन-विधियां, system.reactive

इसका एक उदाहरण खोजना मुश्किल नहीं है कस्टम LINQ एक्सटेंशन विधि कैसे बनाएं। लेकिन मैं एक कस्टम आरएक्स एक्सटेंशन विधि बनाने का उदाहरण नहीं ढूंढ सकता।

क्या कोई मुझे संसाधन में इंगित कर सकता है या उदाहरण पोस्ट कर सकता है? मैं नवीनतम (ver 2.2.5) का उपयोग कर रहा हूँ।

मुझे कस्टम "कास्ट" या कस्टम "चयन" बनाने में दिलचस्पी है। मैं मौजूदा एक्सटेंशन के स्रोत कोड को प्रतिबिंबित कर सकता हूं, और यह अभी भी स्पष्ट नहीं है।

धन्यवाद।

उत्तर:

जवाब के लिए 5 № 1

आरएक्स (मौजूदा परिचालनों को लिखने के अलावा) में कस्टम एक्सटेंशन को लागू करने का सबसे आम तरीका है Observable.Create। इस तरह से ऐसा करने के लिए अत्यधिक सलाह दी जाती है Create कई चिंताओं का ख्याल रखता है कि यह स्वयं को लागू करने के लिए गैर-तुच्छ है।

हालांकि आप इसे करते हैं, पचाना सुनिश्चित करें आरएक्स डिजाइन दिशानिर्देश जो नियमों और सम्मेलनों को समझाते हैं जिन्हें आप पालन करना चाहते हैं - जिनमें से कई Observable.Create आपके लिए ख्याल रखता है

यहाँ एक उदाहरण है Cast कार्यान्वयन:

public static class ObservableExtensions
{
public static IObservable<TResult> Cast<TSource, TResult>(
this IObservable<TSource> source)
{
return Observable.Create<TResult>(o =>
source.Subscribe(x => {
TResult cast;
try
{
cast = (TResult)(object)x;
}
catch (InvalidCastException ex)
{
o.OnError(ex);
return;
}
o.OnNext(cast);
},
o.OnError,
o.OnCompleted));
}
}

मैंने इसे इस तरह रखा है, क्योंकि डबल कास्ट आवश्यकता स्पष्ट नहीं है (वास्तव में IEnumerable"रों Cast वही बात है, उसी कारण से)। आप इस तर्क को एक प्रकार के तर्क को कम करने के लिए कर सकते हैं, यह देखते हुए object कास्ट आवश्यक है:

public static class ObservableExtensions
{
public static IObservable<TResult> Cast<TResult>(
this IObservable<object> source)
{
return Observable.Create<TResult>(o =>
source.Subscribe(x => {
TResult cast;
try
{
cast = (TResult)x;
}
catch (InvalidCastException ex)
{
o.OnError(ex);
return;
}
o.OnNext(cast);
},
o.OnError,
o.OnCompleted));
}
}

आप देख सकते हैं IntroToRx कुछ और के लिए Observable.Create भी।


संबंधित सवाल
सबसे लोकप्रिय