Der Lambda-Ausdruck wird nicht aus diesem Ereignishandler entfernt
Aktualisiert: November 2007
Fehlermeldung
Der Lambda-Ausdruck wird nicht aus diesem Ereignishandler entfernt. Weisen Sie den Lambda-Ausdruck einer Variablen zu, und verwenden Sie die Variable, um das Ereignis hinzuzufügen und zu entfernen.
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.
Wenn Lambda-Ausdrücke zusammen mit Ereignishandlern verwendet werden, entspricht das dargestellte Verhalten möglicherweise nicht den Erwartungen. Der Compiler generiert für jede Definition eines Lambda-Ausdrucks eine neue Methode, auch wenn sie identisch sind. Daher zeigt der folgende Code False an.
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
Wenn Lambda-Ausdrücke zusammen mit Ereignishandlern verwendet werden, kann dies zu unerwarteten Ergebnissen führen. Im folgenden Beispiel wird der durch AddHandler hinzugefügte Lambda-Ausdruck nicht durch die RemoveHandler-Anweisung entfernt.
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
Standardmäßig ist diese Meldung eine Warnung. Weitere Informationen zum Ausblenden von Warnungen bzw. zur Behandlung von Warnungen als Fehler finden Sie unter Konfigurieren von Warnungen in Visual Basic.
Fehler-ID: BC42326
So beheben Sie diesen Fehler
Um die Warnung zu vermeiden und den Lambda-Ausdruck zu entfernen, weisen Sie den Lambda-Ausdruck einer Variablen zu, und verwenden Sie die Variable sowohl in der AddHandler-Anweisung als auch in der RemoveHandler-Anweisung, wie im folgenden Beispiel gezeigt.
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