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

C# 使用参数安全调用多次调用泛型方法(运行时返回类型)的最佳方法,c#,generics,reflection,delegates,C#,Generics,Reflection,Delegates,我觉得我离解决这个问题已经很近了,并且已经阅读了几十篇文章和存在的问题 我有这样一种方法: public T DoStuff(object arg1, object arg2) { /* Do stuff and return a T */ } 我需要能够将此方法传递给另一个类以进行回调。 但是,当另一个类回调时,它将使用一个只有在运行时才知道的不同的预期返回类型进行回调 例如: 然而,我希望能够做到这一点 仅将单个回调对象(即委托或Func)传递给SomeMethod 能够为泛型调用适当

我觉得我离解决这个问题已经很近了,并且已经阅读了几十篇文章和存在的问题

我有这样一种方法:

public T DoStuff(object arg1, object arg2)
{
  /* Do stuff and return a T */
}
我需要能够将此方法传递给另一个类以进行回调。
但是,当另一个类回调时,它将使用一个只有在运行时才知道的不同的预期返回类型进行回调

例如:

然而,我希望能够做到这一点

  • 仅将单个回调对象(即委托或Func)传递给SomeMethod
  • 能够为泛型调用适当地修改此对象
  • 具有调用的类型安全参数,就像我使用委托/Func时一样
  • 我已经找到了适合每种方法的方法,但没有一种方法能够涵盖所有方法。


    有可能吗?

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

    public T DoStuff<T>(object arg1, object arg2)
    

    并使用(例如)
    Activator.CreateInstance(type)
    创建实例。以上内容现在可以与代表一起使用;例如,从
    MakeGenericMethod
    用法中的
    Func

    ,我假设该方法(在您的示例中)在
    T
    中是泛型的:

    public T DoStuff<T>(object arg1, object arg2)
    

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

    是的,你是对的,而且观点很好。我觉得使用这么多的反射很肮脏,但我看不到另一种将数据解析为任意代码对象的运行时方法。有一段时间,我担心调用其他泛型方法,因为我没有实际的“t”类型可供使用,但鉴于我也是通过反射调用它们,这并不是一个大问题,它们甚至可能以类似的方式重写。谢谢是的,你说得对,而且很有道理。我觉得使用这么多的反射很肮脏,但我看不到另一种将数据解析为任意代码对象的运行时方法。有一段时间,我担心调用其他泛型方法,因为我没有实际的“t”类型可供使用,但鉴于我也是通过反射调用它们,这并不是一个大问题,它们甚至可能以类似的方式重写。谢谢
    public object DoStuff(Type type, object arg1, object arg2)