我有一个通用的方法(我无法改变):
object SomeFunc<T>();
麻烦的是我保存/加载了我将要回来的对象的类型。我需要做的是:
Type type = (Type)xmlSerializer.Deserialize(someStream);
Object myObj = SomeFunc<type>();
以上显然不起作用(我没想到)。但是,我想知道是否有可能以某种方式实现这一点。
有什么想法吗?
答案 0 :(得分:3)
要保存类型,您需要保存的只是Type.AssemblyQualifiedName
。要使用该类型调用泛型方法,您必须使用反射,如下所示:
string typeName = LoadAssemblyQualifiedNameFromSomewhere();
Type type = Type.GetType(typeName);
MethodInfo method = this.GetType()
.GetMethod("SomeFunc", BindingFlags.Instance | BindingFlags.NonPublic)
.MakeGenericMethod(type);
object obj = method.Invoke(this, null);
(此示例假定SomeFunc<T>
是当前对象的实例方法)