Лямбда-выражение вместо делегата

У меня 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 });

Как все это упростить с помощью лямбда-выражения?

Я не уверен, чего вы хотите достичь с помощью лямбды. Что вы имеете в виду под словом «проще»?

HimBromBeere 01.11.2018 16:14
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
91
3

Ответы 3

Если это сделает что-нибудь лучше, вы можете использовать Action:

Action<string, RichTextBox> a = (value, lger) => { };

_textBox.Invoke(a, new object[] { "aaaa", _textBox });

Похоже, вы хотите использовать делегат действия, но не предоставили достаточно информации, чтобы точно показать, что и почему вы это делаете.

Aaron Gibson 01.11.2018 16:17

В основном вопрос заключается в следующем: «Как все это упростить с помощью лямбда-выражения?» Этот ответ использует лямбда-выражение через действие для достижения того же самого.

Patrick Hofman 01.11.2018 16:18

Самый простой лайнер, который я могу придумать, это тот

_textBox.Invoke(new Action(() => { doLog("aaaa", _textBox); }));

(он работает, потому что действие - это просто делегат)

А почему только не () => Console.WriteLine(false)?

Patrick Hofman 01.11.2018 16:19

потому что Cannot convert lambda expression to type 'Delegate' because it is not a delegate type

Spixy 01.11.2018 16:21

отредактировал Console.WriteLine(false) в doLog("aaaa", _textBox) в соответствии с примером OP

Spixy 01.11.2018 16:23

объединяя два приведенных выше ответа, я думаю, что это лучший компромисс:

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() });

Что ваш ответ добавляет к ответу Спикси?

Patrick Hofman 01.11.2018 16:35

второй параметр и ссылка на другой вопрос, где дается ответ на ошибку компиляции, которая вызвала этот вопрос в первую очередь. Так что в основном он более полный и имеет некоторую предысторию.

user6813009 01.11.2018 16:40

Он отлично работает ... просто запустил его в проекте фиктивных форм Windows.

user6813009 01.11.2018 16:45

нет верно, если вам нужны параметры, вам нужно будет их указать. Добавил пример.

user6813009 01.11.2018 16:49

В вашем первом коде вы указываете параметры действия а также без параметров. Мне это кажется неправильным / бесполезным.

Patrick Hofman 01.11.2018 16:50

Вы могли бы указать на в первую очередь, это было бы полезно.

user6813009 01.11.2018 16:51

Другие вопросы по теме