Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VB.NET FromEventPattern_Vb.net_Observablecollection_System.reactive_C# To Vb.net - Fatal编程技术网

VB.NET FromEventPattern

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

我不熟悉被动扩展,不幸的是我们使用VB.NET,所以我在将C#示例转换为VB.NET时遇到了一些问题。
我试图创建一个简单的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)