我有这些课程:
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方法?使用类型变量调用泛型方法有多简单?
答案 0 :(得分:1)
如何将结果转换为调用
DoSomething
方法的类型?
您不能静态地执行此操作,因为您的代码在编译时不知道类型,并且该对象的类型已正确。在.NET 4.0及更高版本中执行此操作的一种方法是对dynamic
使用object
而不是result
,如下所示:
dynamic result = generic.Invoke(null, new object[] { "just a string" });
result.DoSomething(); // This will compile
只有在100%确定DoSomething()
方法将在运行时出现时,才能这样做。否则,在运行时会出现异常,您需要捕获并处理它。