如何调用泛型方法未知实例对象类型

时间:2012-05-22 10:54:23

标签: c# generics object instance

使用此代码:

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

如果我使用反射w,则可以是WorldAmbientDomention等类型。

如何获得GetData ???

我只有实例对象:

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

2 个答案:

答案 0 :(得分: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});

答案 1 :(得分:1)

您不需要编写部分。如果未声明type,则C#implicity决定泛型方法中参数的类型;跟着:

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);