[英]How to create IObservable from delegate?
This code: 这段代码:
// 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)
{
}
works fine. 工作正常。 Now I want to use
Rx
. 现在我想使用
Rx
。 This doesn't work, ie, it doesn't even compile: 这是行不通的,即甚至无法编译:
var priceChangedObservable = Observable.FromEvent<QuoteChangeEvent, QuoteChangeEvent>(
(handler) =>
{
QuoteChangeEvent quoteHandler = (e) => handler(e);
},
eh => c.OnQuoteChange += eh,
eh => c.OnQuoteChange -= eh
);
On the line (handler) =>
上线
(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"
On the handler(e)
在
handler(e)
Error CS1503 Argument 1: cannot convert from 'IQuote' to 'QuoteChangeEvent' 296 Active
错误CS1503参数1:无法从“ IQuote”转换为“ QuoteChangeEvent” 296有效
What is the correct way to create an IObservable
from a delegate
? 从
delegate
创建IObservable
的正确方法是什么?
When using Observable.FromEvent<TDelegate, TEventArgs>
, you should pass <QuoteChangeEvent, IQuote>
: 使用
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.