3

私は Reactive Extension を初めて使用しますが、残念ながら VB.NET を使用しているため、C# の例を VB.NET に変換する際に問題が発生しています。
シンプルな ObservableCollection(of String) を作成してサブスクライブしようとしています。コレクションに文字列が追加されるたびに、それをコンソールに出力したいと考えています。
この例を 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)
4

2 に答える 2

3

リクエストに応じて、私は通常そうします:

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 演算子は必要ありません。

于 2012-08-10T23:29:31.803 に答える
0

AddHandlerとのRemoveHandler呼び出しは値を返さないため、 と一緒に使用することはできませんFunctionSub最後の 2 つの引数の代わりに使用してみてください。

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)
于 2012-08-10T20:09:43.840 に答える