Назначьте лямбда-выражение как функцию в C # - PullRequest
0 голосов
/ 31 мая 2018

Я новичок в c #, но из c ++ у нас было кое-что, что вы могли бы сделать, это встроенное создание лямбда-функций.Я пытаюсь что-то подобное, но не работает.Может кто-нибудь показать мне, как сделать что-то подобное?

playButton.Click += (object sender, RoutedEventArgs e) => (getController.startPlay());

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Ваш код должен работать, за исключением одной вещи, когда вы добавляете круглые скобки, (...), часть между ними должна быть выражением , т.е.«что-то, что равно чему-то »

Так вот:

... => (getController.startPlay());

даст вам:

CS0201 Только назначение, вызов,в качестве оператора могут использоваться выражения приращения, уменьшения и новые выражения объекта

Обратите внимание, что даже если метод возвращает что-то, он, вероятно, не будет автоматически соответствовать делегату, который вы пытаетесь использовать для события, в этом случае будет похожая ошибка, но другая причина, поэтому startPlay, возвращающая значение, также не будет работать.

В любом случае, чтобы это работало, вам просто нужно удалить скобки:

... => getController.startPlay();

Код должен работать так, как вы ожидаете.

0 голосов
/ 31 мая 2018

В некоторых случаях вам может понадобиться использовать блок для тела лямбды, особенно когда вам нужно выполнить несколько операторов:

playButton.Click += (s, e) => { getController.startPlay(); Trace.Write("Play..."); };

Для лямбда-выражений, которые на самом деле являются просто одним выражением, выможет опустить блок (в скобках тоже нет необходимости).Например:

Func<int> someDelegate = () => 42;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...