【问题标题】:How do I use a deserialized Type inside of a generic function? C#如何在泛型函数中使用反序列化类型? C#
【发布时间】:2011-10-10 17:36:23
【问题描述】:

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

object SomeFunc<T>();

问题是我保存/加载了我将要返回的对象的类型。我需要做的是:

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

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

有什么想法吗?

【问题讨论】:

    标签: c# function generics types


    【解决方案1】:

    要保存类型,您只需要保存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&lt;T&gt; 是当前对象的实例方法)

    【讨论】:

      猜你喜欢
      • 2017-04-18
      • 1970-01-01
      • 2012-10-18
      • 2013-08-26
      • 2023-03-05
      • 1970-01-01
      • 2021-09-05
      • 2010-12-17
      相关资源
      最近更新 更多