Partager via


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
    

Voir aussi

Concepts

Expressions lambda

Conversion simplifiée des délégués

Événements et gestionnaires d'événements