И Action, и Func без явного приведения

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

Чтобы справиться с этим, у меня есть два метода:

    void Receive(Action func)
    {
        // Do some things.
        func();
    }

    T Receive<T>(Func<T> func)
    {
        // Do some things.
        return func();
    }

(На самом деле у меня есть 34 метода, чтобы получить любое из определенных действий или функций.)

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

    void Test()
    {
        Receive(A);
        Receive(B);
    }

    void A()
    {
    }

    int B()
    {
        return 0;
    }

Точно так же у меня выдает одну ошибку в Receive (B):

The call is ambiguous between the following methods or properties: 'Class1.Receive(System.Action)' and 'Class1.Receive<int>(System.Func<int>)'

Хорошо, подпись такая же (, хотя ошибка не отображается, если я не использую методы ).

Если я удаляю метод Receive (Action ), я получаю в Receive (A )следующую ошибку:

The type arguments for method 'Class1.Receive<T>(System.Func<T>)' cannot be inferred from the usage. Try specifying the type arguments explicitly.

Но мой тип в данном случае void и использовать его в качестве универсального параметра запрещено.

Итак, есть ли способ получить мой метод Receive без использования какого-либо явного приведения Action или Func?

7
задан Alfort 11 July 2012 в 07:43
поделиться