You can use MethodInfo.GetCurrentMethod inside your lambda to retrieve the MethodInfo of the lambda.
With the MethodInfo, you can use Delegate.CreateDelegate to get the properly typed delegate representing your lambda.
And with the delegate, you can unregister the lambda, all without storing your function in a variable or making it a named method.
class MyClass { public event EventHandler TheEvent; void TestIt() { TheEvent += (sender, eventargs) => { Console.WriteLine("Handled!"); // do something in the handler // get a delegate representing this anonymous function we are in var fn = (EventHandler)Delegate.CreateDelegate( typeof(EventHandler), sender, (MethodInfo)MethodInfo.GetCurrentMethod()); // unregister this lambda when it is run TheEvent -= fn; }; // first time around this will output a line to the console TheEvent(this, EventArgs.Empty); // second time around there are no handlers attached and it will throw a NullReferenceException TheEvent(this, EventArgs.Empty); } }