1

このコードで:

World w = new World();
var data = GetData<World>(w);

私がwリフレクションで取得し、これがタイプ、、、などである可能性がWorldあるAmbient場合Domention

どうすれば入手できますGetDataか?

私はインスタンスオブジェクトしか持っていません:

var data = GetData<???>(w);
4

2 に答える 2

2
var type = <The type where GetData method is defined>;

var genericType = typeof(w);

var methodInfo = type.GetMethod("GetData");

var genericMethodInfo = methodInfo.MakeGenericMethod(genericType);

//instance or null : if the class where GetData is defined is static, you can put null : else you need an instance of this class.
var data = genericMethodInfo.Invoke(<instance or null>, new[]{w});
于 2012-05-22T11:00:00.500 に答える
2

セクションを書く必要はありません。タイプが宣言されていない場合、C#はジェネリックメソッドのパラメーターのタイプを暗黙的に決定します。一緒に行く:

var data = GetData(w);

これがサンプルです。

public interface IM
{

}

public class M : IM
{
}

public class N : IM
{

}

public class SomeGenericClass 
{
    public T GetData<T>(T instance) where T : IM
    {
        return instance;
    }
}

そして、あなたはそれを次のように呼ぶかもしれません。

IM a = new M();
SomeGenericClass s = new SomeGenericClass();
s.GetData(a);
于 2012-05-22T11:00:05.057 に答える