Посредник-помощник класса в Vb.net

1

Я ищу попытку реализовать вспомогательный класс посредника, чтобы облегчить передачу информации между режимами просмотра.

Начиная со следующего в С#

static public class Mediator 
{ 
    static IDictionary<string, List<Action<object>>> pl_dict = new Dictionary<string, List<Action<object>>>(); 

    static public void Register(string token, Action<object> callback) 
    { 
        if (!pl_dict.ContainsKey(token)) 
        { 
            var list = new List<Action<object>>(); 
            list.Add(callback); 
            pl_dict.Add(token, list); 
        } 
        else 
        { 
            bool found = false; 
            foreach (var item in pl_dict[token]) 
                if (item.Method.ToString() == callback.Method.ToString()) 
                    found = true; 
            if (!found) 
                pl_dict[token].Add(callback); 
        } 
    } 

    static public void Unregister(string token, Action<object> callback) 
    { 
        if (pl_dict.ContainsKey(token)) 
            pl_dict[token].Remove(callback); 
    } 

    static public void NotifyColleagues(string token, object args) 
    { 
        if (pl_dict.ContainsKey(token)) 
            foreach (var callback in pl_dict[token]) 
                callback(args); 
    } 
} 

В итоге я получаю следующее в vb (любезно предоставлено онлайн-конвертером telerik

Public NotInheritable Class Mediator
Private Sub New()
End Sub
Shared pl_dict As IDictionary(Of String, List(Of Action(Of Object))) = New Dictionary(Of String, List(Of Action(Of Object)))()

Public Shared Sub Register(token As String, callback As Action(Of Object))
    If Not pl_dict.ContainsKey(token) Then
        Dim list = New List(Of Action(Of Object))()
        list.Add(callback)
        pl_dict.Add(token, list)
    Else
        Dim found As Boolean = False
        For Each item As var In pl_dict(token)
            If item.Method.ToString() = callback.Method.ToString() Then
                found = True
            End If
        Next
        If Not found Then
            pl_dict(token).Add(callback)
        End If
    End If
End Sub

Public Shared Sub Unregister(token As String, callback As Action(Of Object))
    If pl_dict.ContainsKey(token) Then
        pl_dict(token).Remove(callback)
    End If
End Sub

Public Shared Sub NotifyColleagues(token As String, args As Object)
    If pl_dict.ContainsKey(token) Then
        For Each callback As var In pl_dict(token)
            callback(args)
        Next
    End If
End Sub
End Class

Компилятору не нравятся два оператора For Each <...> As var. Я предполагаю, что это стиль linq С#, который всегда очень трудно перевести с легкостью. Это я, якобы, потому что я все еще пытаюсь понять весь принцип. Может ли кто-нибудь предложить правильную конструкцию для этих двух строк.

благодаря

Теги:
linq
wpf

1 ответ

2
Лучший ответ

В VB эквивалент var состоит в том, чтобы просто объявить переменную без указания типа, например:

For Each callback In pl_dict(token)
    callback(args)
Next

Однако для того, чтобы это сработало, вам нужно иметь Option Infer On. В качестве альтернативы вы можете просто указать тип переменной итератора как бы то ни было (в данном случае Action(Of Object)), например:

For Each callback As Action(Of Object) In pl_dict(token)
    callback(args)
Next
  • 0
    Спасибо стивен

Ещё вопросы

Сообщество Overcoder
Наверх
Меню