У меня Delegatea:
public delegate void doLog( String value , RichTextBox lger ) ;
public void doLg(String value, RichTextBox lger)
{
lger.AppendText(value);
}
doLog a = new doLog(doLg);
Я использую этого делегата в своем вызове Invoke:
_textBox.Invoke(a, new Object[] { "aaaa", _textBox });
Как все это упростить с помощью лямбда-выражения?





Если это сделает что-нибудь лучше, вы можете использовать Action:
Action<string, RichTextBox> a = (value, lger) => { };
_textBox.Invoke(a, new object[] { "aaaa", _textBox });
Похоже, вы хотите использовать делегат действия, но не предоставили достаточно информации, чтобы точно показать, что и почему вы это делаете.
В основном вопрос заключается в следующем: «Как все это упростить с помощью лямбда-выражения?» Этот ответ использует лямбда-выражение через действие для достижения того же самого.
Самый простой лайнер, который я могу придумать, это тот
_textBox.Invoke(new Action(() => { doLog("aaaa", _textBox); }));
(он работает, потому что действие - это просто делегат)
А почему только не () => Console.WriteLine(false)?
потому что Cannot convert lambda expression to type 'Delegate' because it is not a delegate type
отредактировал Console.WriteLine(false) в doLog("aaaa", _textBox) в соответствии с примером OP
объединяя два приведенных выше ответа, я думаю, что это лучший компромисс:
textBox1.Invoke(new Action(() => { /* your code here */ }), new object[] { "a", "b" });
Редактировать; сильно заимствовал у этого вопрос
РЕДАКТИРОВАТЬ 2; пример с параметрами:
textBox1.Invoke(new Action<string, RichTextBox>((a, b) => {}), new object[] {"a", new RichTextBox() });
Что ваш ответ добавляет к ответу Спикси?
второй параметр и ссылка на другой вопрос, где дается ответ на ошибку компиляции, которая вызвала этот вопрос в первую очередь. Так что в основном он более полный и имеет некоторую предысторию.
Он отлично работает ... просто запустил его в проекте фиктивных форм Windows.
нет верно, если вам нужны параметры, вам нужно будет их указать. Добавил пример.
В вашем первом коде вы указываете параметры действия а также без параметров. Мне это кажется неправильным / бесполезным.
Вы могли бы указать на в первую очередь, это было бы полезно.
Я не уверен, чего вы хотите достичь с помощью лямбды. Что вы имеете в виду под словом «проще»?