首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VB.NET FromEventPattern

VB.NET FromEventPattern
EN

Stack Overflow用户
提问于 2012-08-11 03:28:45
回答 2查看 1K关注 0票数 3

我刚接触反应式扩展,不幸的是我们使用的是VB.NET,所以我在将C#示例转换为VB.NET时遇到了一些问题。

我正在尝试创建一个简单的ObservableCollection(of String)并订阅它。每当向集合中添加一个字符串时,我都希望将其写出到控制台。

我试图将这个例子翻译成VB.NET,但遇到了问题。

代码语言:javascript
复制
var x = Observable.FromEventPattern<NotifyCollectionChangedEventHandler, NotifyCollectionChangedEventArgs>(
    handler => (sender, e) => handler(sender, e),
    handler => theList.CollectionChanged += handler,
    handler => theList.CollectionChanged -= handler);
}

我已经走到这一步了,但我不能让它工作,我相信这很简单,但我是一个新手。

代码语言:javascript
复制
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

这段代码编译得很好:

代码语言:javascript
复制
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)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-11 07:29:32

根据请求,我通常会这样做:

代码语言:javascript
复制
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运算符。

票数 3
EN

Stack Overflow用户

发布于 2012-08-11 04:09:44

AddHandlerRemoveHandler调用不返回值,因此不能在Function中使用它们。尝试对最后两个参数使用Sub

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11908049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档