UnHooking Events with Lambdas in C#
c#, events, lambda
Solution
Unforutantely there is not a great way to do this. You are really stuck with one of two options
- Use a method as you described
- Assign the lambda to a variable and use the variable to add / remove the event
Problem
I often run into a situation where I want to subscribe to an event, but I want to use a lambda to do so: ``` public class Observable { public event EventHandler SomethingHappened; public void DoSomething() { // Do Something... OnSomethingHappened(); } } // Somewhere else, I hook the event observable.SomethingHappened += (sender, args) => Console.WriteLine("Something Happened"); ``` The problem I run into is that I don't know how to unhook the event. Since the lambda creates an anonymous delegate under the hood, I have nothing to call `-=` on. Now, I could just create a method: ``` private void SomethingHappened(object sender, EventArgs args) { Console.WriteLine("Something Happened"); } ``` And then I can hook/unhook all I want: ``` observable.SomethingHappened += SomethingHappened; observable.SomethingHappened -= SomethingHappened; ``` But I'd really, really, really like to use my lambda instead. In a more complicated example, lambdas come in really handy here. I am pretty sure that I am out of luck... but I was wondering if anyone out there has figured out a way to do this?