BC42326: Ekspresi Lambda tidak akan dihapus dari penanganan aktivitas ini

Ekspresi Lambda tidak akan dihapus dari penanganan aktivitas ini. Tetapkan ekspresi lambda ke variabel dan gunakan variabel untuk menambahkan dan menghapus peristiwa.

Saat ekspresi lambda digunakan dengan penanganan aktivitas, Anda mungkin tidak melihat perilaku yang Anda harapkan. Pengkompilasi menghasilkan metode baru untuk setiap definisi ekspresi lambda, bahkan jika keduanya identik. Oleh karena itu, kode berikut menampilkan False.

Module Module1

    Sub Main()
        Dim fun1 As ChangeInteger = Function(p As Integer) p + 1
        Dim fun2 As ChangeInteger = Function(p As Integer) p + 1
        Console.WriteLine(fun1 = fun2)
    End Sub

    Delegate Function ChangeInteger(ByVal x As Integer) As Integer

End Module

Ketika ekspresi lambda digunakan dengan penanganan aktivitas, ini dapat menyebabkan hasil yang tidak terduga. Dalam contoh berikut, ekspresi lambda yang ditambahkan oleh AddHandler tidak dihapus oleh RemoveHandler pernyataan.

Module Module1

    Event ProcessInteger(ByVal x As Integer)

    Sub Main()

        ' The following line adds one listener to the event.
        AddHandler ProcessInteger, Function(m As Integer) m

        ' The following statement searches the current listeners
        ' for a match to remove. However, this lambda is not the same
        ' as the previous one, so nothing is removed.
        RemoveHandler ProcessInteger, Function(m As Integer) m

    End Sub
End Module

Secara default, pesan ini adalah peringatan. Untuk informasi selengkapnya tentang cara menyembunyikan peringatan atau memperlakukan peringatan sebagai kesalahan, lihat Mengonfigurasi Peringatan di Visual Basic.

ID Kesalahan: BC42326

Untuk memperbaiki kesalahan ini

Untuk menghindari peringatan dan menghapus ekspresi lambda, tetapkan ekspresi lambda ke variabel dan gunakan variabel dalam AddHandler pernyataan dan RemoveHandler , seperti yang ditunjukkan dalam contoh berikut.

Module Module1

    Event ProcessInteger(ByVal x As Integer)

    Dim PrintHandler As ProcessIntegerEventHandler

    Sub Main()

        ' Assign the lambda expression to a variable.
        PrintHandler = Function(m As Integer) m

        ' Use the variable to add the listener.
        AddHandler ProcessInteger, PrintHandler

        ' Use the variable again when you want to remove the listener.
        RemoveHandler ProcessInteger, PrintHandler

    End Sub
End Module

Lihat juga