L'expression lambda ne sera pas supprimée de ce gestionnaire d'événements
Mise à jour : novembre 2007
Message d'erreur
L'expression lambda ne sera pas supprimée de ce gestionnaire d'événements. Assignez l'expression lambda à une variable et utilisez la variable pour ajouter et supprimer l'événement.
Lambda expression will not be removed from this event handler. Assign the lambda expression to a variable and use the variable to add and remove the event.
Lorsque des expressions lambda sont utilisées avec les gestionnaires d'événements, vous pouvez ne pas observer le comportement que vous attendez. Le compilateur génère une nouvelle méthode pour chaque définition d'expression lambda, même si elles sont identiques. Par conséquent, le code suivant affiche 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
Lorsque des expressions lambda sont utilisées avec les gestionnaires d'événements, cela peut provoquer des résultats inattendus. Dans l'exemple suivant, l'expression lambda ajoutée par AddHandler n'est pas supprimée par l'instruction RemoveHandler.
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
Par défaut, ce message est un avertissement. Pour plus d'informations sur le masquage des avertissements ou le traitement des avertissements en tant qu'erreurs, consultez Configuration d'avertissements en Visual Basic.
ID d'erreur : BC42326
Pour corriger cette erreur
Pour éviter l'avertissement et supprimer l'expression lambda, assignez l'expression lambda à une variable et utilisez la variable à la fois dans les instructions AddHandler et RemoveHandler, comme indiqué dans l'exemple suivant.
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