如何在泛型函数中使用反序列化类型? C#

时间:2011-07-22 02:24:07

标签: c# function generics types

我有一个通用的方法(我无法改变):

object SomeFunc<T>();

麻烦的是我保存/加载了我将要回来的对象的类型。我需要做的是:

Type type = (Type)xmlSerializer.Deserialize(someStream);
Object myObj = SomeFunc<type>();

以上显然不起作用(我没想到)。但是,我想知道是否有可能以某种方式实现这一点。

有什么想法吗?

1 个答案:

答案 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>是当前对象的实例方法)