让我们说,如果我遇到如下情况。
Type somethingType = b.GetType();
// b is an instance of Bar();
Foo<somethingType>(); //Compilation error!!
//I don't know what is the Type of "something" at compile time to call
//like Foo<Bar>();
//Where:
public void Foo<T>()
{
//impl
}
如何在编译时不知道类型的情况下调用泛型函数?
答案 0 :(得分:11)
您需要使用反射:
MethodInfo methodDefinition = GetType().GetMethod("Foo", new Type[] { });
MethodInfo method = methodDefinition.MakeGenericMethod(somethingType);
method.Invoke();
在编写通用方法时,最好在可能的情况下提供非泛型过载。例如,如果Foo<T>()
的作者添加了Foo(Type type)
重载,则您无需在此处使用反射。