调用 T 是 Type 的泛型方法
Call generic method which T is a Type
有一个从实体中选择字段的通用方法,如下所示
public object GetOrderDynamically<T>(Expression selectPredicate, Expression predicate, Type type)
{
var order = orderFacade.FetchMulti((Expression<Func<Order, bool>>) predicate).AsQueryable();
return order.Select((Expression<Func<Order, T>>)selectPredicate).FirstOrDefault();
}
调用该方法的搜索结果为this
问题:我想澄清所选字段的类型。但是这个方法位于业务层,我可以通过它的接口使用它。实际上,业务层 classes 将通过 IoC 注入到我的 class 中。
不知何故我想用反射调用我的方法,这些方法是通过注入实例化的,并且能够将 T 设置为类型
任何帮助。谢谢
您想使用 MethodInfo 上可用的 MakeGenericMethod 方法,例如
someTarget.GetType()
.GetMethod("SomeGenericMethod")
.MakeGenericMethod(typeof(SomeGenericArgument)
.Invoke(someTarget, someParameters);
另请参阅:
Calling generic method with a type argument known only at execution time
编辑 - 对于给定的例子
orderBiz.GetOrderDynamically<tt>(selectExp, predicateExp); – unos
baghaii 5 mins ago
orderBiz.GetType().GetMethod("GetOrderDynamically").MakeGenericMethod(tt).Invoke(orderBiz, new object [] { selectExp, predicateExp });
有一个从实体中选择字段的通用方法,如下所示
public object GetOrderDynamically<T>(Expression selectPredicate, Expression predicate, Type type)
{
var order = orderFacade.FetchMulti((Expression<Func<Order, bool>>) predicate).AsQueryable();
return order.Select((Expression<Func<Order, T>>)selectPredicate).FirstOrDefault();
}
调用该方法的搜索结果为this
问题:我想澄清所选字段的类型。但是这个方法位于业务层,我可以通过它的接口使用它。实际上,业务层 classes 将通过 IoC 注入到我的 class 中。
不知何故我想用反射调用我的方法,这些方法是通过注入实例化的,并且能够将 T 设置为类型
任何帮助。谢谢
您想使用 MethodInfo 上可用的 MakeGenericMethod 方法,例如
someTarget.GetType()
.GetMethod("SomeGenericMethod")
.MakeGenericMethod(typeof(SomeGenericArgument)
.Invoke(someTarget, someParameters);
另请参阅:
Calling generic method with a type argument known only at execution time
编辑 - 对于给定的例子
orderBiz.GetOrderDynamically<tt>(selectExp, predicateExp); – unos baghaii 5 mins ago
orderBiz.GetType().GetMethod("GetOrderDynamically").MakeGenericMethod(tt).Invoke(orderBiz, new object [] { selectExp, predicateExp });