0

私は何かをしたい

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 を解決できないと言っていますか? 私は何を間違っていますか?ヘルプや例は常に高く評価されます。

4

1 に答える 1

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));
    }    
}
于 2012-05-18T19:27:01.143 に答える