如何使用带变量的参数Action(Of T)调用方法

时间:2015-04-10 17:24:29

标签: vb.net

我正在将一些c#代码转换为vb.net,并且我一直遇到一个特定方法的问题。
这是c#方法签名 -

public void DoSomething(Action<T> something)
{ .... do something in here }

这是我对签名的vb.net转换 -

Public Sub DoSomething(ByVal something As Action(Of T))
    ....do something in here
End Sub

我必须用变量调用它。这是一个示例c#call -

_myobject.DoSomething(x => { newValue = x.CallSomeMethod() });

如何使用Vb.Net执行相同的调用? 我试过这个(以及一些变化),但newValue对象总是空的 -

_myObject.DoSomething(Sub(x) newValue = x.CallSomeMethod())

我也试过了 -

_myObject.DoSomething(Function(x) newValue = x.CallSomeMethod() End Function)

如果我这样做 -

 _myObject.DoSomething(Function(x) newValue = x.CallSomeMethod())

我收到一条错误消息,指出Cannot apply operator '=' to operands of type myType and myType

1 个答案:

答案 0 :(得分:1)

SourceClass使用DoSomething方法,而TargetClassCallSomeMethod,将作为匿名Sub的一部分进行调用:

Public Class SourceClass

    Public Sub DoSomething(ByRef something As Action(Of TargetClass))
        Dim t As New TargetClass
        something(t)
    End Sub

End Class

Public Class TargetClass
    Function CallSomeMethod() As Integer
        Return 1000
    End Function
End Class

Main方法中添加以下内容:

Public Module Module1

    Sub Main()

        Dim newValue = 11
        Dim myObject = New SourceClass

        myObject.DoSomething(New Action(Of TargetClass)(Sub(obj) newValue = obj.CallSomeMethod()))

        Debug.WriteLine(newValue)

    End Sub    

End Module

在此示例中,newValue将被分配1000。