如何将以下代码从C#转换为VB而不将“variable”作为全局变量公开。
private void SomeMethod(SomeType variable)
{
this.SomeEvent+= delegate
{
if (variable == 1)
{
this.DoSomething();
}
}
//here I have some other code
}
答案 0 :(得分:4)
一种可能的解决方案
Private Sub SomeMethod(ByVal variable As Integer)
AddHandler Me.SomeEvent,
Sub()
If (variable = 1) Then
Me.DoSomething()
End If
End Sub
Console.WriteLine("ciao")
End Sub
我只是尝试了它,它就像一个魅力,所以我不知道为什么你说它没有:( Visual Studio 2010。
您也可以这样做
Private Sub SomeMethod(ByVal variable As Integer)
Me.SomeEvent = DirectCast(Delegate.Combine(Me.SomeEvent, Sub()
If (variable = 1) Then
Me.DoSomething
End If
End Sub), MyDelegate)
...mycode
End Sub
Delegate.Combine与AddHandler具有完全相同的效果。
我没有visual studio 2008,所以我不知道如何在VS2008中编写,尝试第二种解决方案,第一种似乎只能在2010年使用。
如果这不起作用,你可以试试这个,写更多代码:
Public Delegate Sub MyDelegate()
Public Class Class1
Public Event SomeEvent As MyDelegate
Private Class MyDelegateClass
Public Owner As Class1
Public Variable As Integer
Public Sub Method()
If (Variable = 1) Then
Owner.DoSomething()
End If
End Sub
End Class
Private Sub SomeMethod(ByVal variable As Integer)
Dim dc As New MyDelegateClass
dc.Owner = Me
dc.Variable = variable
AddHandler Me.SomeEvent, AddressOf dc.Method
Console.WriteLine("ciao")
End Sub
Public Sub DoSomething()
Console.WriteLine("hello")
End Sub
End Class
Visual Studio语法糖通过匿名委托执行类似的操作。
答案 1 :(得分:0)
谷歌向我指出website表示他们是免费的。