【问题标题】:VB.NET function that takes other functions as a parameter, and executes them将其他函数作为参数并执行它们的 VB.NET 函数
【发布时间】:2010-04-29 01:09:12
【问题描述】:

在 vb.net 中有没有办法创建一个子/函数,它将某种指向另一个函数的指针作为参数,并允许这个新的子/函数执行传递的函数?

我有 10-12 个 xml-rpc 函数,我正在针对远程服务器调用。这些函数中的每一个都有不同的参数列表(一个需要 1 个字符串,另一个可能需要 3 个字符串和一个 int 等)。它们都返回一个对象。

正如我所说的那样,它似乎应该能够更好地分解。例如,每次我调用这些函数中的任何一个时,我都想测试会话丢弃的返回值,并尝试重新连接到远程系统等。

使用 .net 3.5

谢谢!

-R

【问题讨论】:

    标签: .net vb.net xml-rpc


    【解决方案1】:

    你需要被带到……Func'y 镇

    【讨论】:

      【解决方案2】:
      Public Sub DoSomething(outerFunction as Func(of T))
          ' do something
      
          ' call passed in function
          Dim value = outerFunction
      End Sub
      

      【讨论】:

        【解决方案3】:

        【讨论】:

        • 我编辑了您的答案,以便审核队列中的其他人 reviewing it 更清楚地知道这不是仅链接的答案。
        • FWIW,我认为the answer that came after yours 中的双关语在功能上具有相同的内容,这可能不保证它超过你的额外 11 票。
        【解决方案4】:

        经过一番研究,我想出了一个解决方案:

        使用 CallByName 函数:

        MSDN reference

        这让我拥有一个实际运行 12 个单独函数的函数,并让我拥有一个集中的错误处理系统:

           Private Function RunRemoteRequest(ByVal functionName As String, ByVal service_url As String, ByVal args() As Object) As Object
            Dim retnVal As Object
        
            Dim success As Boolean = False
            While success = False And Me._connAttemptCount < MAX_ATTEMPTS
                Try
                    retnVal = CallByName(remProxy, functionName, Method, args)
                    success = True
                    Me._connAttemptCount = 0
                Catch ex As Exception
                    Me._connAttemptCount += 1
                    If ex.Message = "Error I am looking for" Then
                        Me.Login()
                    Else
                        log.Error("Error in RunRemoteRequest(" & functionName & ").", ex)
                    End If
                End Try
            End While
        
            RunRemoteRequest = retnVal
        
        End Function 
        

        请注意,您需要在您正在处理的模块/类中包含 Imports Microsoft.VisualBasic.CallType。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-01-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-05-19
          相关资源
          最近更新 更多