我一整天都在阅读这些帖子,但这些帖子似乎都与我已经足够接近的情况相符。我有一个类有以下方法:
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。
答案 0 :(得分:1)
对于这些情况,似乎没有真正好的反思方法。我觉得你做的很好。写得更紧凑:
MethodInfo queryMethod = Dal.GetType().GetMethods()
.SingleOrDefault(mi => mi.Name == "Query" &&
mi.GetGenericArguments().Length == 1);
即使您的类型包含也称为Query
的非泛型方法,看起来GetGenericArguments
表现良好并返回一个空(零长度)数组。