【发布时间】:2012-12-06 15:34:29
【问题描述】:
我有一个 linq 查询,它当前正在基于泛型类型参数进行对象实例化。我实际上需要实例化泛型参数的更具体的子类。有没有办法用派生类型进行实例化?如有必要,我愿意使用反射甚至直接 IL 发射,但如果可能的话,我想尝试对基类的属性进行类型检查。
所以我的代码是这样的:
IQueryable<TType> myObjects = from blah in blahblah
select new TType
{
PropertyA = someValue;
PropertyB = someOtherValue;
}
但我需要 IQueryable 中的对象实际上是 TType 的派生类。我事先不知道它们将是哪个派生类,只是它们都是基于其他逻辑的相同派生类型。
【问题讨论】:
-
TType是实际类型还是模板参数?如果是模板参数,可以在TType上添加约束吗? -
TType 是包含该方法的类的泛型类型参数。代码的目标是从通用基本类型生成上下文特定实体。我们只能在编译时保证它将是抽象公共类型的某种派生。
-
如何在编译时保证?是否有任何限制或可能是任何类型?例如,会不会是
int? -
函数的一个参数是否可以是一个
Func<TType> constructor,它返回一个新构造的对象,它是某种类型的TType?然后你可以传入从()=> new ConcreteType()到() => MyFactory.Create(...)的任何东西。 -
@DStanley-TType 被限制为抽象的公共基本类型。
标签: c# linq reflection instantiation