我想做点什么
public class someClass{
public void somemethod<T>(){
//dosomething with T;
}
public void someothermethod<U>(){
//dosomething with U;
}
}
同时在另一个班级
IDictionary<Type,Type> dic = new Dictionary<Type, Type>();
dic.add(ClassA, InterfaceA);
dic.add(ClassB, InterfaceB);
dic.add(ClassC, InterfaceC);
dic.add(ClassD, InterfaceD);
dic.foreach(kvp => somemethod<kvp.key>().someothermethod<kvp.value>());
这似乎不起作用。在尖括号内,Visual Studio告诉我它无法解析kvp?我究竟做错了什么?任何帮助或示例总是受到赞赏。
答案 0 :(得分:3)
这根本不是关于字典的 - 它是关于在执行时只知道类型时调用泛型方法。
您可以使用MethodInfo.MakeGenericMethod
进行反射,然后调用结果:
using System;
using System.Reflection;
class Test
{
static void Main()
{
InvokeGenericMethod(typeof(string));
InvokeGenericMethod(typeof(int));
}
static void InvokeGenericMethod(Type type)
{
var method = typeof(Test).GetMethod("GenericMethod");
var generic = method.MakeGenericMethod(type);
generic.Invoke(null, null);
}
public static void GenericMethod<T>()
{
Console.WriteLine("typeof(T) = {0}", typeof(T));
}
}