Expressão lambda não será removido do manipulador de eventos
Mensagem de erro
Expressão lambda não será removido desta evento manipulador.atribuir a expressão lambda a uma variável e use a variável para adicionar e remover o evento.
Quando as expressões lambda são usadas com evento manipuladores, você pode não ver o comportamento esperado.O compilador gera um novo método para cada definição de expressão lambda, mesmo que sejam idênticos.Portanto, o código a seguir exibe 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
Quando as expressões lambda são usadas com manipuladores de eventos, isso pode causar resultados inesperados.No exemplo a seguir, a expressão lambda adicionada por AddHandler não é removido pela RemoveHandler demonstrativo.
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
Por padrão, essa é uma mensagem de aviso.Para obter mais informações sobre como ocultar avisos ou tratar avisos como erros, consulte Configurando Avisos (Warnings) no Visual Basic.
ID de erro: BC42326
Para corrigir este erro
Para evitar o aviso e remover a expressão lambda, atribua a expressão lambda a uma variável e use a variável no AddHandler e RemoveHandler instruções, sistema autônomo mostrado no exemplo a seguir.
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