В общем случае нельзя, так как объект лямбды создается каждый, поэтому нужно вынести функцию отдельно.
Но если регистрация и удаление обработчика происходят в одной функции/блоке, то ответ
joyrax-dev будет правильным.
Но можно сделать такой костыль:
public class MyEvent
{
public event EventHandler ActionHappened;
public void FireEvent()
{
ActionHappened?.Invoke(this, EventArgs.Empty);
}
}
public class SomeClass
{
public void RegisterInner(MyEvent @event)
{
EventHandler handler = null!;
handler = (sender, args) =>
{
Console.WriteLine("Hello, world");
@event.ActionHappened -= handler;
};
@event.ActionHappened += handler;
}
}
public class Program
{
public static void Main()
{
var myEvent = new MyEvent();
var someClass = new SomeClass();
someClass.RegisterInner(myEvent);
myEvent.FireEvent();
myEvent.FireEvent();
myEvent.FireEvent();
myEvent.FireEvent();
myEvent.FireEvent();
}
}
Hello, world будет выведен только 1 раз