如何调用通用方法不知道实例对象类型

本文关键字:不知道 方法 实例 对象 类型 何调用 调用 | 更新日期: 2023-09-27 18:34:51

使用以下代码:

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

如果我得到反射w,这可以是 World 型、Ambient型、Domention

型等。

我怎样才能获得GetData ???

我只有实例对象:

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

如何调用通用方法不知道实例对象类型

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

你不需要写部分。如果未声明类型,则 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);