C # -ден VB-қа делегатты түрлендіру

C # -ден VB-ге келесі айнымалы кодты «айнымалы» жаһандық айнымалы ретінде көрсетпей қалай түрлендіруге болады.

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

2 жауаптар

Мүмкін болатын шешім

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 сияқты дәл осындай әсерге ие.

Менде көрнекі студиялар 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

Көрнекі студиялардың синтаксистік қанты анонимді делегатпен ұқсас.

4
қосылды
бұл жұмыс істемейді, себебі бірінші EndSub кейін менің әдісімді өшіріп, қалған бөлігі орындалмайды:
қосылды автор checho, көзі
Бұл қол жетімді емес. End Function VS функциясын қосқаннан кейін оны End Sub-ге автоматты түрде өзгертеді (ол менің әдісімді өлтіреді)
қосылды автор checho, көзі
Мен VS2008-ды қолданамын және кодыңыздың жұмыс істемеуінің себебі болды. Мен бұл ақпаратты басынан бастап қосқан болар едім. Егер сіз VS2008-ді шешуді ойласаңыз, оны шынымен бағалаймын. Қалай болғанда да мен мұны жауап ретінде белгілеп отырмын.
қосылды автор checho, көзі

Google маған тегін екенін айтқан веб-сайтында »көрсеткен.

0
қосылды
Бұл түрлендіргіш дұрыс жұмыс істемейді.
қосылды автор checho, көзі
Мен C# -н VB-ге өте көп айналдырып жатырмын, бірақ мен оны осы делегатпен алмаймын.
қосылды автор checho, көзі
yep, олардың біреуі де көмектесті.
қосылды автор checho, көзі
Осы жерде айтқаныңыздан басқа, Telerik-дің басқа да пайдалы онлайн-түрлендіргіші сілтемесін қолданамын
қосылды автор checho, көзі
@checho - Сіз енгізген код тіпті жарамсыз код болып табылады, сондықтан оны айырбастау құралы болмады. Егер сіз мұны құралсыз жасай алмасаңыз, онда сізде үлкен проблемалар бар, содан кейін біз шеше аламыз. Делегаттардың жай ғана түсінбейтініне ұқсайды
қосылды автор Security Hound, көзі
Кез-келген автоматтандырылған түрлендіру құралы секілді, ол қателіктерге ие болады. Сіз тек түрлендіргішке сене алмайсыз, екі тіл арасындағы кілт сөздердің айырмашылығы туралы білуіңіз керек. VB білмеймін, бірақ VB кодты C# -ге кілт сөздерді оқып шығу үшін ғана қолданамын.
қосылды автор Brandon Buck, көзі
Міне, мен осы екі арасындағы айырбастау үшін пайдаланамын: VB және C# салыстыру
қосылды автор Brandon Buck, көзі
@checho Рамхун сізге VB делегаттары туралы оқуға сілтеме берді және Salvatore сіз үшін VB аудармасын ұсынды.
қосылды автор Brandon Buck, көзі
Бұл бетті MSDN ішінен Анонимді әдістер бөлімінен көріңіз.
қосылды автор Brandon Buck, көзі