调用T为Type的泛型方法

时间:2015-03-16 13:57:17

标签: c# generics reflection

有一种通用方法可以从实体中选择一个字段,如下所示

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

问题:我想澄清所选字段的类型。但是这个方法位于业务层,我可以将它与它的接口一起使用。实际上,业务层类将通过IoC注入到我的类中。

不知何故,我想用反射调用我的方法,这些方法通过注入实例化,并且能够将T设置为类型

任何帮助。谢谢

1 个答案:

答案 0 :(得分:2)

您想使用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&lt; tt&gt;(selectExp,predicateExp); - unos   baghaii 5分钟前

    orderBiz.GetType().GetMethod("GetOrderDynamically").MakeGenericMethod(tt).Invoke(orderBiz, new object [] { selectExp, predicateExp });