【问题标题】:Creating a generic object based on a Type variable [duplicate]基于类型变量创建通用对象
【发布时间】:2010-10-31 14:49:56
【问题描述】:

我需要基于存储在数据库中的类型创建一个通用对象。我怎样才能做到这一点?下面的代码(不会编译)解释了我的意思:

string typeString = GetTypeFromDatabase(key);
Type objectType = Type.GetType(typeString);

//This won't work, but you get the idea!
MyObject<objectType> myobject = new MyObject<objectType>();

这种事情可以做吗?

谢谢

【问题讨论】:

    标签: c# .net generics


    【解决方案1】:
    Type type = typeof(MyObject<>).MakeGenericType(objectType);
    object myObject = Activator.CreateInstance(type);
    

    另外 - 小心; Type.GetType(string) 只检查正在执行的程序集和少数系统程序集;它不会扫描所有内容。如果您使用程序集限定名称,您应该没问题 - 否则您可能需要先获取 Assembly,然后使用 someAssembly.GetType(string)

    【讨论】:

    • 您创建的对象是否必须有一个不带参数的构造函数?
    • @Charlie 您可能已经在其间的一年中解决了这个问题,但为了完整起见,不,您可以将其他构造函数与Activator.CreateInstance(Type, params Object[]) 一起使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多