如何获得具有多个泛型匹配方法的MethodInfo



我一整天都在看这方面的帖子,似乎没有一个与我所掌握的情况相符。我有一个具有以下方法的类:

IQueryable<TBusinessContract> Query<TBusinessContract>(
    Expression<Func<TBusinessContract, bool>> condition, params string[] children )
    where TBusinessContract : BusinessContract;
IQueryable<TSubType> Query<TSuperType, TSubType>(
    Expression<Func<TSubType, bool>> condition, params string[] children )
    where TSuperType : BusinessContract
    where TSubType : BusinessContract;

我想为第一个获取一个MethodInfo。我尝试了许多不同的组合和排列,我要么得到null或一个模棱两可的匹配异常。我已经提出了下面的工作,但感觉有点笨拙。

MethodInfo queryMethod = Dal.GetType()
    .GetMethods( BindingFlags.Public | BindingFlags.Instance )
    .Where( mi => mi.Name == "Query" )
    .Where( mi => mi.IsGenericMethod )
    .Where( mi => mi.GetGenericArguments().Length == 1 )
    .SingleOrDefault();

这是我能做的最好的还是我错过了什么?我使用的是。net 4.5。

对于这些情况似乎没有真正好的反射方法。我觉得你做的很好。写得更紧凑一点:

MethodInfo queryMethod = Dal.GetType().GetMethods()
    .SingleOrDefault(mi => mi.Name == "Query" &&
    mi.GetGenericArguments().Length == 1);

即使您的类型包含也命名为Query的非泛型方法,看起来GetGenericArguments也会表现良好并返回空(零长度)数组。

相关内容

  • 没有找到相关文章

最新更新