VB.NET FromEventPattern
我不熟悉被动扩展,不幸的是我们使用VB.NET,所以我在将C#示例转换为VB.NET时遇到了一些问题。VB.NET FromEventPattern,vb.net,observablecollection,system.reactive,c#-to-vb.net,Vb.net,Observablecollection,System.reactive,C# To Vb.net,我不熟悉被动扩展,不幸的是我们使用VB.NET,所以我在将C#示例转换为VB.NET时遇到了一些问题。 我试图创建一个简单的ObservableCollection(字符串)并订阅它。每当向集合中添加字符串时,我都希望将其写入控制台。 我试图将此示例翻译为VB.NET,但遇到了问题 var x = Observable.FromEventPattern<NotifyCollectionChangedEventHandler, NotifyCollectionChangedEventArgs
我试图创建一个简单的ObservableCollection(字符串)并订阅它。每当向集合中添加字符串时,我都希望将其写入控制台。
我试图将此示例翻译为VB.NET,但遇到了问题
var x = Observable.FromEventPattern<NotifyCollectionChangedEventHandler, NotifyCollectionChangedEventArgs>(
handler => (sender, e) => handler(sender, e),
handler => theList.CollectionChanged += handler,
handler => theList.CollectionChanged -= handler);
}
感谢@Gideon Engelberth帮助我删除不必要的地址
这很好:
Dim changes = Observable.FromEventPattern(Of
System.Collections.Specialized.NotifyCollectionChangedEventHandler, _
NotifyCollectionChangedEventArgs) _
(Function(handler) Sub(sender, args) handler(sender, args), _
Sub(handler) AddHandler theList.CollectionChanged, handler, _
Sub(handler) RemoveHandler theList.CollectionChanged, handler)
AddHandler
和RemoveHandler
调用不返回值,因此不能将它们与函数一起使用。尝试对最后两个参数使用Sub
Dim changes = Observable.FromEventPattern(Of System.Collections.Specialized.NotifyCollectionChangedEventHandler, NotifyCollectionChangedEventArgs) _
(Function(handler) Function(sender, args) handler(sender, args), _
Sub(handler) AddHandler theList.CollectionChanged, AddressOf handler, _
Sub(handler) RemoveHandler theList.CollectionChanged, AddressOf handler)
根据要求,我通常会这样做:
Dim c As New ObservableCollection(Of String)
Dim obs = Observable.FromEventPattern(Of NotifyCollectionChangedEventHandler,
NotifyCollectionChangedEventArgs)(
Sub(h) AddHandler c.CollectionChanged, h,
Sub(h) RemoveHandler c.CollectionChanged, h)
由于h
已经是一个委托变量,因此不需要AddressOf运算符。第一个参数应该是函数(处理程序)子(发送方,参数)…
。事件处理程序不返回值。虽然我从未使用过这个重载,但我通常只使用add/remove处理程序方法。@GideonEngelberth,我做了这个更改,它消除了我的第一个编译错误。但是,我仍然得到编译错误“AddressOf”操作数必须是Add\Remove处理程序行AddressOf处理程序
上的方法名(不带括号)。你能用你所使用的重载作为例子来创建你自己的答案吗?非常感谢。
Dim c As New ObservableCollection(Of String)
Dim obs = Observable.FromEventPattern(Of NotifyCollectionChangedEventHandler,
NotifyCollectionChangedEventArgs)(
Sub(h) AddHandler c.CollectionChanged, h,
Sub(h) RemoveHandler c.CollectionChanged, h)