У меня есть объект, который при запуске запрашивает некоторую информацию с сервера.Он отправляет идентификатор с сообщением, которое будет таким же, как и в ответе, поэтому он может быть уверен, что отвечает на правильное сообщение.В настоящее время код выглядит примерно так:
void GetInitialData()
{
string guid = Guid.NewGuid().ToString();
Communicator.NewMessage += (sender, e)
{
if(e.Message.Id == guid)
FillInfo();
};
Communicator.SendMessage(new Message(stuff, guid));
}
Это работает, но поскольку эти данные нужны только один раз, я бы хотел отписаться от этого события впоследствии, чего нельзя сделать с лямбдой,Если вместо этого я использую отдельную функцию, это позволяет мне отписаться, но кажется, что единственный способ передать параметр в функцию - через переменную класса.
string guid;
void GetInitialData()
{
Communicator.NewMessage += MessageReceived;
Communicator.SendMessage(new Message(stuff, guid));
}
void MessageReceived(object sender, MessageArgs e)
{
if(e.Message.Id == guid)
{
FillInfo();
Communicator.NewMessage -= MessageReceived;
}
}
Есть ли способ обойти это, что позволит мне отказаться от подписки, а также избежать загромождения класса дополнительными переменными?