C # dan VB ga delegatni aylantirish

Qanday qilib o'zgaruvchini global o'zgarmaydigan sifatida ko'rsatmasdan, quyidagi kodni C# dan VB ga o'zgartira olaman.

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

2 javoblar

Mumkin bo'lgan echim

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

Men bu ishni sinab ko'rdim va u jozibadorlik kabi ishlaydi, shuning uchun nima uchun aytishni bilmayman :( Visual studio 2010.

Siz ham shunday qilishingiz mumkin

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 bilan bir xil ta'sirga ega.

Menda vizual studiya 2008 mavjud emas, shuning uchun VS2008 da qanday yozishni bilmayman, ikkinchi hal qilishni sinab ko'ring, birinchi bo'lib faqatgina 2010 yilda ishlaydi.

Agar bu ishlamasa, siz buni sinab ko'rishingiz mumkin, bunga qo'shimcha kod yoziladi:

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 sintaktik shakar anonim delegatega o'xshash narsadir.

4
qo'shib qo'ydi
bu ishlamaydi, chunki birinchi EndSubdan keyin mening usulimni uzdi va qolgan kod bajarilmadi:
qo'shib qo'ydi muallif checho, manba
Bu kirish mumkin emas. End Function VS qo'shilgandan so'ng uni avtomatik ravishda End Fevralga o'zgartiradi (bu mening uslubimni o'ldiradi)
qo'shib qo'ydi muallif checho, manba
Men VS2008 dan foydalanmoqdaman va shu sababli kod ishlamagan. Bu ma'lumotni boshidanoq qo'shishim kerak edi. Agar siz VS2008 uchun echimni o'ylab ko'rsangiz, men buni juda qadrlayman. Yaxshiyamki, men buni javob sifatida ko'rmoqdaman.
qo'shib qo'ydi muallif checho, manba

Google meni bepul deb hisoblaydigan saytida ko'rsatdi.

0
qo'shib qo'ydi
Ushbu konvertor to'g'ri ishlamaydi.
qo'shib qo'ydi muallif checho, manba
Men Cbni VBga juda ko'p o'zgartiraman, lekin men uni bu delegat bilan qilolmayman.
qo'shib qo'ydi muallif checho, manba
Yo'q, ulardan birontasi ham yordam bermadi.
qo'shib qo'ydi muallif checho, manba
Bu erda siz Telerikdan foydalanadigan boshqa foydali onlayn konvertor bo'lib, bog'lash
qo'shib qo'ydi muallif checho, manba
@checho - Siz kiritgan kod hatto kod emas, shuning uchun uni almashtirish vositasi zararli emas edi. Agar siz buni vositasiz bajarolmaysiz, unda siz katta muammolarga duch kelsangiz, biz hal qila olamiz. Delegantsni tushunmaysiz
qo'shib qo'ydi muallif Security Hound, manba
Har qanday avtomatlashtirilgan ayirmachi vosita kabi, u xatolarga ega bo'ladi. Faqat konvertorga tayanolmaysiz, kalit so'zlar ikki til orasida qanday farq borligi haqida ba'zi ma'lumotlarga ega bo'lishingiz kerak. VBni bilmayman, lekin VB kodini kalit so'zlardagi maqolalarni o'qishdan foydalanish uchun C# ga o'zgartirdim.
qo'shib qo'ydi muallif Brandon Buck, manba
Ikki kishini o'zaro almashtirish uchun foydalanadigan narsalar quyidagilardir: VB va C# Comparison
qo'shib qo'ydi muallif Brandon Buck, manba
@checho Yaxshi, Ramxound Sizga va hokazo haqida delegatlar haqida o'qish uchun link berdi va Salvatore siz uchun VB tarjima taklif qildi.
qo'shib qo'ydi muallif Brandon Buck, manba
Ushbu sahifani MSDN dan Anonim usullar bo'limida sinab ko'ring.
qo'shib qo'ydi muallif Brandon Buck, manba