У меня есть класс, который должен получать методы, чтобы вызывать их, а также выполнять другие действия. Эти методы должны использоваться много раз и для многих разных пользователей, поэтому чем проще, тем лучше.
Чтобы справиться с этим, у меня есть два метода:
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?