我可以使用c#dictionary <type,type>在foreach循环中使用这些类型吗?</type,type>

时间:2012-05-18 19:15:11

标签: c# function generics lambda

我想做点什么

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?我究竟做错了什么?任何帮助或示例总是受到赞赏。

1 个答案:

答案 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));
    }    
}