Я изучаю выражение лямбда и делегаты. Пока я пытаюсь выполнить следующее, я получаю ошибку в строке, выделенной полужирным шрифтом. (Ошибка: оператор «+ =» не может применяться к операндам типа «Test.MessageDelegate» и «lambda expression»). Помогите мне обработать выражение лямбда.C# Lambda expression -Help
namespace Test
{
public delegate void MessageDelegate(string title,object sender,EventArgs e);
class Program
{
static event MessageDelegate logEvent;
static void Main(string[] args)
{
logEvent = new MessageDelegate(OnLog);
logEvent("title",Program.logEvent,EventArgs.Empty);
LogEvent + = (SRC, е) => {ONLOG ("Некоторые", SRC, д); };
Console.ReadKey(true);
}
static void OnLog(string title, object sender, EventArgs e)
{
if (logEvent != null)
{
Console.WriteLine("title={0}", title);
Console.WriteLine("sender={0}", sender);
Console.WriteLine("arguments={0}",e.GetType());
}
}
}
}
Предположим, если я обновить my Main() как logEvent + = (str, src, e) => {OnLog («Один», Program.logEvent, EventArgs.Empty); }; logEvent + = (str, src, e) => {OnLog («Два», Program.logEvent, EventArgs.Empty); }; (ничего не выполнено, как я могу его вызвать?) – user196546
Я имею в виду, рассмотрим, что Main() имеет только две строки, как указано в приведенном выше комментарии. – user196546
Хмм, я не уверен, что следую тому, что вы хотите сделать здесь. «+ =» Назначает слушателю определенное событие. Когда logEvent происходит, вызовите OnLog. Эта строка кода сама по себе не поднимает событие журнала, она только говорит, что делать *, когда * событие поднято. Чтобы поднять событие журнала, вы должны сделать «if (logEvent! = Null) logEvent (« title », this, null); (или все, что вы хотите передать) –