使用参数安全调用多次调用泛型方法(运行时返回类型)的最佳方法

Mat*_*ell 1 c# generics reflection delegates

我觉得我已经非常接近于解决这个问题并阅读了数十篇文章和现有问题.

我有这样的方法:

public T DoStuff(object arg1, object arg2)
{
  /* Do stuff and return a T */
}
Run Code Online (Sandbox Code Playgroud)

我需要能够将此方法传递给另一个类以进行回调.
但是,当这个其他类回调时,它将使用仅在运行时知道的不同的预期返回类型.

例如:

public void SomeMethod(MethodInfo m, ref object caller)
{
  MethodInfo callback = m.MakeGenericMethod(new Type[] { runtimeType });
  callback.Invoke(caller, new [] { arg1val, arg2val });
}

/* DoStuff() will make a call to SomeMethod() passing 
 * itself (the method and the object) */
Run Code Online (Sandbox Code Playgroud)

但是,我希望能够做到这一点

  1. 仅将一个回调对象(即委托或Func <>)传递给SomeMethod.
  2. 能够为通用调用适当地修改此对象.
  3. 像使用委托/ Func <>那样,为调用提供类型安全的参数.

我找到了适合这些方法的方法,但没有一方能够涵盖所有这些方法.

可能吗?

Mar*_*ell 5

根据MakeGenericMethod用法,我假设方法(在您的示例中)是通用的T:

public T DoStuff<T>(object arg1, object arg2)
Run Code Online (Sandbox Code Playgroud)

鉴于你正在做的反思,这根本不是对你有任何好处; 从反射中使用你也可以使用:

public object DoStuff(Type type, object arg1, object arg2)
Run Code Online (Sandbox Code Playgroud)

并使用(例如)Activator.CreateInstance(type)创建实例.以上内容现在可以与代表一起使用; 例如a Func<Type,object,object,object>.