2009-11-15 2 views
0

Я изучаю выражение лямбда и делегаты. Пока я пытаюсь выполнить следующее, я получаю ошибку в строке, выделенной полужирным шрифтом. (Ошибка: оператор «+ =» не может применяться к операндам типа «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()); 
      } 
     } 
    } 

} 

ответ

5

С LogEvent имеет MessageDelegate как его обработчик событий, вам нужно левой рукой лямбда-выражения (src, e), чтобы соответствовать подписи MessageDelegate

Изменения в (str, src, e) => OnLog(str, src, e)

+0

Предположим, если я обновить my Main() как logEvent + = (str, src, e) => {OnLog («Один», Program.logEvent, EventArgs.Empty); }; logEvent + = (str, src, e) => {OnLog («Два», Program.logEvent, EventArgs.Empty); }; (ничего не выполнено, как я могу его вызвать?) – user196546

+0

Я имею в виду, рассмотрим, что Main() имеет только две строки, как указано в приведенном выше комментарии. – user196546

+0

Хмм, я не уверен, что следую тому, что вы хотите сделать здесь. «+ =» Назначает слушателю определенное событие. Когда logEvent происходит, вызовите OnLog. Эта строка кода сама по себе не поднимает событие журнала, она только говорит, что делать *, когда * событие поднято. Чтобы поднять событие журнала, вы должны сделать «if (logEvent! = Null) logEvent (« title », this, null); (или все, что вы хотите передать) –