通过子/函数字典迭代并调用它们

时间:2016-02-22 19:54:51

标签: vb.net

我试图在VB.net中获取指向函数的指针(如在C ++中)并将其添加到稍后要调用的字典中。我不知道如何在VB中执行此操作,但我知道它可以使用void *在C ++中轻松完成。我真的想避免使用非常大的var itemurl = "https://.../Json/Items/"; var token = "<your token here>"; $.ajax({ type: "GET", beforeSend: function(xhr) { xhr.setRequestHeader("Authorization", "Basic " + btoa(token)); }, url: itemurl, dataType: 'json', async: false, success: function(data, textStatus) { // your actions here }, error: function (xhr, testStatus, errorThrown) { // } }); Select Case语句来拥有8000个全局变量,例如nextTime_RunSub1,nextTime_RunSub2等。

例如:

If

1 个答案:

答案 0 :(得分:1)

这项工作(两种格式)。因此,如果它们都是没有参数的相同类型的函数,你可以将你的调用包装在统一的返回中,或者只是执行addressOf。

这不完全是你的代码(我知道......我知道)。但是为您提供Lambda函数字典的快速示例。它是vb.net。

Option Strict On

Module Module1

    Sub Main()

        Dim getters As New Dictionary(Of String, Func(Of Boolean))
        getters.Add("First", New Func(Of Boolean)(Function() 
            Console.WriteLine("Test Run")
            Return true
        End Function))
        getters.Add("Second", AddressOf TestMe)

        For each el In getters.Values
            el()
        Next

    End Sub

    Public function TestMe() As boolean
        Console.WriteLine("Test Run")
        Return true
    End function

End Module

Dictionary(of Action,Single)也有效......

我想你也可以在没有return参数的情况下做到(vb.net相当于void function()Sub(),它是Action类型的对象,如下所示)。

Module Module1

    Sub Main()

        Dim getters As New Dictionary(Of String, Action)
        getters.Add("First", New Action(sub() 
            TestMe()
        End sub))
        getters.Add("Second", AddressOf TestMe2)
        For each el In getters.Values
            el()
        Next

    End Sub

    Public Sub TestMe2() 
        Console.WriteLine("Test Run")
    End Sub

    Public function TestMe() As boolean
        Console.WriteLine("Test Run")
        Return true
    End function

End Module