Как я могу создать делегаты C #, которые не возвращаются? - PullRequest
1 голос
/ 17 ноября 2009

Так как делегаты Func <> не принимают "void", как я могу получить следующее в C # 3.0

Func<int, int, void> delg = (a, b) => { Console.WriteLine( a + b); };

Ответы [ 4 ]

11 голосов
/ 17 ноября 2009

Используйте действие вместо Func.

    Action<int, int> delg = (a, b) => { Console.WriteLine( a + b); };
0 голосов
/ 17 ноября 2009

Func и Action являются оболочками делегатов, Funcs возвращает значение (имя может быть получено из функции VBs ..?), А Actions - нет.

Как сказал CSharpAtl, так как они оба являются обертками, вы также можете сделать свое собственное делате с именем, которое имеет для вас больший смысл (как, например, VoidFunc(int val1 ,int val2)), я думал, что Func и Action довольно стандартный.

0 голосов
/ 17 ноября 2009
    Func<int, int, Action> foo = (a, b) => () => Console.Out.WriteLine("{0}.{1}", a, b);
        foo(1, 2)();
0 голосов
/ 17 ноября 2009

В качестве альтернативы Action<int, int> вы можете создать свой собственный делегат, а также возвращать и передавать любые типы, которые вам нужны.

public delegate void MyDelegate(int val1, int val2);

использование:

MyDelegate del = (a, b) => {Console.WriteLine( a + b); };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...