簡體   English   中英

如何從委托創建IObservable?

[英]How to create IObservable from delegate?

這段代碼:

// NOTE: IQuote DOES NOT inherit from EventArgs
public interface IQuote// : EventArgs
{
}

class C
{
   //NOTE, this is NOT public event EventHandler<IQuote> QuoteChangeEvent;
    public delegate void QuoteChangeEvent(IQuote q);
}

var c = new C();

c.OnQuoteChange += ProcessQuoteChange;


public static void ProcessQuoteChange(IQuote q)
{
}

工作正常。 現在我想使用Rx 這是行不通的,即甚至無法編譯:

var priceChangedObservable = Observable.FromEvent<QuoteChangeEvent, QuoteChangeEvent>(
    (handler) =>
    {
        QuoteChangeEvent quoteHandler = (e) => handler(e);                   
    },
    eh => c.OnQuoteChange += eh,
    eh => c.OnQuoteChange -= eh
    );

上線(handler) =>

- "Severity Code    Description Project File    Line    Suppression State   
   Error    CS1643  Not all code paths return a value in lambda expression  
   of type 'Func<Action<QuoteChangeEvent>,   
   QuoteChangeEvent>'       294 Active"

handler(e)

錯誤CS1503參數1:無法從“ IQuote”轉換為“ QuoteChangeEvent” 296有效

delegate創建IObservable的正確方法是什么?

使用Observable.FromEvent<TDelegate, TEventArgs> ,應傳遞<QuoteChangeEvent, IQuote>

var priceChangedObservable = Observable.FromEvent<QuoteChangeEvent, IQuote>(
    handler =>
    {
        QuoteChangeEvent quoteHandler = (e) => { handler(e); }; 
        return quoteHandler;         
    },
    eh => c.OnQuoteChange += eh,
    eh => c.OnQuoteChange -= eh
);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM