我有一系列使用此构造函数的类:
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()
并取第一个条目,因为这些类只有一个 - 但那将是脆弱的。
答案 0 :(得分:3)
但是,在这种情况下,
dynamic
和typeof(dynamic)
都不可接受。
请考虑使用typeof(object)
代替typeof(dynamic)
。
MSDN说dynamic
那个
在大多数情况下,它的功能类似于具有类型对象。
特别是,以下代码失败并显示错误&#34; Type&#39; .... JsonWrapper&#39;已经定义了一个名为&#39; JsonWrapper&#39;使用相同的参数类型&#34;
public class JsonWrapper
{
public JsonWrapper(dynamic json) { }
public JsonWrapper(object json) { }
}