вызвать Func <int, bool> путем отражения - PullRequest
4 голосов
/ 23 марта 2011

Я хочу сохранить лямбды-объекты и выполнить их позже, используя отражение. Независимо от достоинств такого подхода, мне интересно, как заставить работать что-то вроде следующего.

Скажем, у меня есть разные функции, определенные как -

Func<string,bool> f1 = (i)=>i == "100";
Func<int,bool> f2 = (i)=>i == 100;

Могу ли я выполнить их во время выполнения, если получу все типы, задействованные во время выполнения (я не могу привести объект к Func и т. Д., Потому что я не знаю, какие типы задействованы), Могу ли я сделать что-то вроде следующего?

void RunFunc(Type param1, Type returnParam, object obj)
{
   Type funcType = typeof(Func<,>).MakeGenericType(param1,returnParam);
   var d = Delegate.CreateDelegate(funcType , obj,"Invoke");
   d.DynamicInvoke();
}

Спасибо

1 Ответ

5 голосов
/ 23 марта 2011

Конечно, вы можете.Вам просто нужно вызвать DynamicInvoke, указав параметр соответствующего типа.

Но зачем?Вы можете сделать намного проще

Delegate del;

del = f1;
var result1 = del.DynamicInvoke("99");

del = f2;
var result2 = del.DynamicInvoke(100);

Вы можете привести любой из них к Delegate, и вам даже не нужно знать типы аргументов или возвращаемое значение для их вызоваколичество аргументов).Конечно, вам нужно знать тип возвращаемого значения в какой-то момент, чтобы использовать его, но это все.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...