按类型调用泛型方法



我有这些类:

public static class A{
    ...
   public C Run<T>(string something)
   {
       ...
   }
}
public static class B{
    ...
    public void Exec<T>(Type type)
    {
        MethodInfo method = typeof(A).GetMethod("Run");
        MethodInfo generic = method.MakeGenericMethod(type);
        var result = generic.Invoke(null, new object[] { "just a string" });
        // bad call in next line
        result.DoSomething();
    }
}

public class C{
    ...
    public void DoSomething(){}
}

如何转换结果类型调用DoSomething方法?使用类型变量调用泛型方法有多简单?

如何将结果转换为调用DoSomething方法的类型?

不能静态地这样做,因为代码在编译时不知道对象的类型,而对象已经是正确的类型。在。net 4.0及以后的版本中,使用dynamic而不是object来代替result,如下所示:

dynamic result = generic.Invoke(null, new object[] { "just a string" });
result.DoSomething(); // This will compile

你可以这样做,只有当你100%确定DoSomething()方法将在运行时在那里。否则,将在运行时出现异常,您需要捕获并处理。

相关内容

  • 没有找到相关文章

最新更新