Я хочу создать делегаты различного типа, используя только один общий метод, подобный этому.
public static object Boo(params object[] args) {
return null;
}
MethodInfo boo = /* MethodInfo of Boo */
// Boo's arg.Length should be `0`
Action action = (Action)Delegate.CreateDelegate(typeof(Action), null, boo);
Func<int> action2 = (Func<int>)Delegate.CreateDelegate(typeof(Func<int>), null, boo);
Func<string, string> action3 = (Func<string, string>)Delegate.CreateDelegate(typeof(Func<string, string>), null, boo);
Итак, если вы вызываете action3
так же, как это
var ret = action3.Invoke("booo");
Бу args.Length
должно быть 1, а ret
равно null
.
Возможно ли это в C #?
- Нет
dynamic
, generic
или linq.exprssion
sry.
Обновление
Это должно быть сделано с Reflection
. Выше 3 делегата являются лишь примером. Тип делегатов будет определен во время выполнения.