将委托从C#转换为VB

时间:2011-10-28 14:04:52

标签: c# vb.net delegates

如何将以下代码从C#转换为VB而不将“variable”作为全局变量公开。

private void SomeMethod(SomeType variable)
{
    this.SomeEvent+= delegate
    {
        if (variable == 1)
        {
           this.DoSomething();
        }
    }
    //here I have some other code
}

2 个答案:

答案 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表示他们是免费的。