Преобразование любого делегата в делегат с параметром object [] - PullRequest
0 голосов
/ 26 апреля 2018

Я хочу преобразовать любой делегат, возвращающий, например, bool, где первый параметр имеет тип MyClass, а другие аргументы могут быть преобразованы в object, например

bool FirstMethod(MyClass foo, int integer, string text)
bool SecondMethod(MyClass foo, string text, AnotherClass bar)

до Func<MyClass, object[], bool>, поэтому параметры после MyClass будут помещены в массив объектов.
Это как-то возможно?

1 Ответ

0 голосов
/ 26 апреля 2018

У вас есть в руках:

delegate bool FirstMethod(MyClass foo, int integer, string text);

и вы хотите написать метод преобразования, который принимает один из них и возвращает

Func<MyClass, object[], bool>

Это просто:

static Func<MyClass, object[], bool> Convert(FirstMethod f) =>
  (m, o) => f(m, (int)o[0], (string)o[1]);

Готово. Просто сделайте это для каждого типа делегата, который вы хотите преобразовать.

Вы можете даже сделать это методом расширения, если хотите.

...