VB.NET FromEventPattern



我是反应式扩展的新手,不幸的是我们使用 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);
}

我已经走到了这一步,但无法让它工作,我确定这很简单,但我是一个新手。

Dim changes = Observable.FromEventPattern(Of System.Collections.Specialized.NotifyCollectionChangedEventHandler, NotifyCollectionChangedEventArgs) _
(Function(handler) Function(sender, args) handler(sender, args), _
Function(handler) AddHandler theList.CollectionChanged, AddressOf handler, _
Function(handler) RemoveHandler theList.CollectionChanged, AddressOf handler)

感谢@Gideon Engelberth帮助我去除了不必要的AddressOf
这编译得很好:

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)

根据要求,我通常这样做:

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 运算符。

AddHandlerRemoveHandler 调用不返回值,因此不能将它们与 Function 一起使用。 尝试对最后两个参数使用 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)

相关内容

  • 没有找到相关文章

最新更新