当其中一个参数是动态的时候,如何获取类型的构造函数?

时间:2014-07-22 00:14:29

标签: c# dynamic reflection constructor

我有一系列使用此构造函数的类:

MyClass(Reader reader, dynamic json)  { ... }

我需要在泛型方法中实例化对象。为此,我试图得到构造函数:

class Reader
...
T  Get<T>(string id)
    {
    dynamic  json        = GetData(id);
    var      constructor = typeof(T).GetConstructor(new Type[] { typeof(Reader), typeof(dynamic) });
    return constructor.Invoke(new object[] { this, json });
    }

但是,在这种情况下,dynamictypeof(dynamic)都不可接受。这样做的恰当方法是什么?构造函数确实存在。似乎没有针对这种情况的约束旗帜。

目前,我已经创建了一个简单的JsonWrapper类作为解决方法:

class JsonWrapper
{
JsonWrapper(dynamic json) { Json = json; }
dynamic  Json  { get;  private set; }
}
...
var  constructor = typeof(T).GetConstructor(new Type[] { typeof(Reader), typeof(JsonWrapper) });

我也可以调用GetConstructors()并取第一个条目,因为这些类只有一个 - 但那将是脆弱的。

1 个答案:

答案 0 :(得分:3)

  

但是,在这种情况下,dynamictypeof(dynamic)都不可接受。

请考虑使用typeof(object)代替typeof(dynamic)

MSDNdynamic那个

  

在大多数情况下,它的功能类似于具有类型对象。

特别是,以下代码失败并显示错误&#34; Type&#39; .... JsonWrapper&#39;已经定义了一个名为&#39; JsonWrapper&#39;使用相同的参数类型&#34;

public class JsonWrapper
{
    public JsonWrapper(dynamic json) { }
    public JsonWrapper(object json) { }
}