Создание и применение лямбды в одной строке в C # - PullRequest
3 голосов
/ 12 июня 2011

Надеюсь, это не глупый вопрос, но есть ли какой-нибудь способ достичь следующего вида вещей в C #?

int y = (x => x * x)(9);

Я знаю, что могу сделать это:

delegate int Transformer(int x);
Transformer square = x => x * x;
int y = square(9);

Но есть ли способ сделать то же самое более кратко?Если нет, есть ли веская причина, почему нет?

Ответы [ 2 ]

5 голосов
/ 12 июня 2011

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

Это должно сработать:

int result = new Transformer(x => x * x)(9);

То же самое более лаконично:

int x = 9;
int result = x * x;
4 голосов
/ 12 июня 2011

Вы можете сделать это:

int y = ((Func<int,int>)(x => x * x))(9);

или использовать его в качестве выражения создания делегата:

int y = new Func<int,int>(x => x * x)(9);

Хотя это не очень полезно ...

(Я использовал Func<int, int> в качестве альтернативы вашему Transformer делегату, чтобы использовать встроенные типы делегатов, где это возможно.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...