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

本文关键字:何获得 构造函数 类型 动态 参数 一个 | 更新日期: 2023-09-27 18:14:06

我用这个构造函数创建了一系列的类:

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()并获取第一个条目,因为这些类只有一个-但这将是脆弱的。

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

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

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

MSDN说dynamic

在大多数情况下,它的作用就像对象类型。

特别是,下面的代码失败,错误"Type '.... "JsonWrapper'已经定义了一个名为'JsonWrapper'的成员,具有相同的参数类型"

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