我正在将一些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
答案 0 :(得分:1)
SourceClass
使用DoSomething
方法,而TargetClass
有CallSomeMethod
,将作为匿名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。