【问题标题】:Initialize generic object from a System.Type从 System.Type 初始化通用对象
【发布时间】:2010-05-14 11:25:12
【问题描述】:

我需要创建一个泛型类型,但我在编译时不知道该类型。我想这样做:

Type t = typeof(whatever);
var list = new List<t>

这不会编译,因为 t 不是有效类型。但它确实知道所有关于有效类型的信息。有没有办法像这样从 System.Type 动态创建通用列表?我可能需要反思,没关系,我只是有点迷路了。

【问题讨论】:

    标签: c# generics


    【解决方案1】:

    像这样:

    Type t;
    Type genericListType = typeof(List<>).MakeGenericType(t);
    object list = Activator.CreateInstance(genericListType);
    

    请注意,您只能将其分配给object 类型的变量。 (虽然您可以转换为非泛型 IList 接口)

    要使用list 变量,您可能需要反射。

    【讨论】:

    • 这很好用,只是以后使用起来很痛苦。虽然完成了工作。
    • 正确;使用起来很痛苦。可能有更好的选择;你可以在这里问另一个问题,告诉我们你想做什么。
    • 事实证明,在我的应用程序中,我可以很容易地将其转换为非泛型接口,并且效果很好。
    猜你喜欢
    • 1970-01-01
    • 2013-06-27
    • 2018-02-10
    • 2010-12-06
    • 1970-01-01
    • 2013-05-07
    • 1970-01-01
    • 1970-01-01
    • 2012-10-19
    相关资源
    最近更新 更多