Temsilciyi C # 'dan VB'ye dönüştürün

Aşağıdaki kodu global değişken olarak "değişken" göstermeden C# 'dan VB'ye nasıl dönüştürebilirim.

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

2 cevap

Bir olası çözüm

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

Sadece bunu denedim ve bir çekicilik gibi çalışıyor, bu yüzden neden söylediğimi bilmiyorum :( Visual studio 2010.

Bunun gibi bir şey de yapabilirsin

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 ile tamamen aynı etkiye sahiptir.

2008'de görsel stüdyom yok, bu yüzden VS2008'de nasıl yazacağımı bilmiyorum, ikinci çözümü deneyin, ilk sadece 2010'da çalışıyor gibi görünüyor.

Bu işe yaramazsa, bunu denemek için daha fazla kod yazabilirsiniz:

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 sözdizimsel şeker anonim temsilci ile böyle bir şey yapar.

4
katma
Bu işe yaramaz, çünkü ilk EndSub'dan sonra yöntemimi kestim ve kodun geri kalanı yürütülmedi:
katma yazar checho, kaynak
Bu erişilebilir değil. Bir kez ekledikten sonra End Fonksiyonu VS otomatik olarak End Sub olarak değiştirir (benim yöntemimi öldürür)
katma yazar checho, kaynak
VS2008 kullanıyorum ve bu kod çalışma değildi nedeni oldu. Bu bilgiyi en baştan eklemeliydim. VS2008 için çözüm düşünürseniz gerçekten takdir edeceğim. Her neyse, bunu cevap olarak işaretliyorum.
katma yazar checho, kaynak

Google beni ücretsiz olduğunu belirten bu web sitesinde işaret etti.

0
katma
Bu dönüştürücü düzgün çalışmıyor.
katma yazar checho, kaynak
C # 'yı VB'ye oldukça dönüştürüyorum ama yine de bu delege ile başaramıyorum.
katma yazar checho, kaynak
Evet, onlardan biri yardım etti.
katma yazar checho, kaynak
katma yazar checho, kaynak
@checho - Gönderdiğiniz kod, geçerli bir kod bile değil, bu yüzden şok bir dönüşüm aracı yardım etmedi. Bunu bir araç olmadan yapamazsanız, o zaman daha büyük problemleriniz olur, o zaman çözebiliriz. Sanki delegeleri anlayamıyor gibisin
katma yazar Security Hound, kaynak
Herhangi bir otomatik dönüştürme aracı gibi, onun hataları olacaktır. Sadece dönüştürücüye güvenemezsiniz, anahtar kelimelerin iki dil arasında nasıl farklılık gösterdiği hakkında biraz bilgi sahibi olmalısınız. VB'yi bilmiyorum ama VB kodunu C# 'ye anahtar kelimelerdeki makaleleri okumadan kullanmak için dönüştürdüm.
katma yazar Brandon Buck, kaynak
İşte ikisi arasında dönüşüm yapmak için kullandığım şey: VB ve C# Karşılaştırması
katma yazar Brandon Buck, kaynak
@checho Eh, Ramhound size VB hakkında delegeler hakkında okumak için bir bağlantı verdi ve Salvatore sizin için bir VB çeviri teklif etti.
katma yazar Brandon Buck, kaynak
MSDN'den Anonim Yöntemler 'de bu sayfayı deneyin.
katma yazar Brandon Buck, kaynak