Можно ли объявить универсальный делегат без параметров? - PullRequest
4 голосов
/ 07 декабря 2011

У меня есть ...

Func<string> del2 = new Func<string>(MyMethod);

, и я действительно хочу сделать ..

Func<> del2 = new Func<>(MyMethod);

, поэтому возвращаемый тип метода обратного вызова void.Возможно ли это с помощью универсального типа func?

Ответы [ 5 ]

15 голосов
/ 07 декабря 2011

Семейство делегатов Func предназначено для методов, которые принимают ноль или более параметров и возвращают значение.Для методов, которые принимают ноль или более параметров и не возвращают значение, используйте один из делегатов Action.Если метод не имеет параметров, используйте неуниверсальную версию Action:

Action del = MyMethod;
7 голосов
/ 07 декабря 2011

Да, функция, возвращающая void (без значения): Action

public Test()
{
    // first approach
    Action firstApproach = delegate
    {
        // do your stuff
    };
    firstApproach();

    //second approach 
    Action secondApproach = MyMethod;
    secondApproach();
}

void MyMethod()
{
    // do your stuff
}

надеюсь, что это поможет

3 голосов
/ 07 декабря 2011

Использование Тип делегата действия .

2 голосов
/ 07 декабря 2011

В случаях, когда вы «вынуждены» использовать Func<T>, например, во внутреннем универсальном API, который вы хотите использовать повторно, вы можете просто определить его как new Func<object>(() => { SomeStuff(); return null; });.

0 голосов
/ 02 июля 2018

Вот пример кода с использованием лямбда-выражений вместо делегатов Action / Func.

delegate void TestDelegate();

static void Main(string[] args)
{
  TestDelegate testDelegate = () => { /*your code*/; };

  testDelegate();
}
...