【发布时间】:2017-09-20 08:54:49
【问题描述】:
我有一个在运行时生成的动态Type,比如myGeneratedType。我正在尝试创建以下类的实例,其中T 应该是myGeneratedType。我遇到了几个答案,其中必须将动态类型设置为类的属性,但似乎无法让它在 List<T> 上工作:
Type myGeneratedType;
private class Container<T>
{
public string a { get; set; }
public string b { get; set; }
public List<T> c { get; set; }
}
void Main()
{
Container<myGeneratedType> c = new Container<myGeneratedType>();
}
显然,我的方法Main() 中的代码行不起作用。我应该怎么做才能以我的动态类型作为泛型类型参数创建一个Container 类?
【问题讨论】:
-
您还遇到了哪些其他答案,为什么它们不起作用?
-
使用 MakeGenericType: msdn.microsoft.com/en-us/library/…
-
您能否添加一些上下文,例如您将要使用
c做什么?如果您在编译时不知道该类型,您可以像@YairHalberstadt 建议的那样构造Type,但这无助于声明c并使用它。你到底想达到什么目的? -
@RenéVogt 我正在尝试反序列化不同的
JSON消息,容器始终相同,但数据 (List<T>) 不是。在运行时,我确实有关于T定义的元数据,我用它来生成myGeneratedType。最后,我希望能够像(new System.Web.Script.Serialization.JavaScriptSerializer()) .Deserialize(json, typeof(Container<>).MakeGenericType(myGeneratedType))那样反序列化它