当其中一个参数是动态的时,如何获得类型的构造函数?
本文关键字:何获得 构造函数 类型 动态 参数 一个 | 更新日期: 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 });
}
然而,在这种情况下,dynamic
和typeof(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()
并获取第一个条目,因为这些类只有一个-但这将是脆弱的。
然而,
dynamic
和typeof(dynamic)
在这种情况下都是不可接受的。
考虑使用typeof(object)
代替typeof(dynamic)
。
MSDN说dynamic
在大多数情况下,它的作用就像对象类型。
特别是,下面的代码失败,错误"Type '.... "JsonWrapper'已经定义了一个名为'JsonWrapper'的成员,具有相同的参数类型"
public class JsonWrapper
{
public JsonWrapper(dynamic json) { }
public JsonWrapper(object json) { }
}