选择具有反射的右通用方法
我想通过反射选择正确的通用方法,然后调用它。
通常这很容易。例如
var method = typeof(MyType).GetMethod("TheMethod");var typedMethod = method.MakeGenericMethod(theTypeToInstantiate);
但是,当方法存在不同的泛型重载时,问题就开始了。例如,System.Linq.Queryable类中的静态方法。'Where'方法有两种定义
static IQueryable<T> Where(this IQueryable<T> source, Expression<Func<T,bool>> predicate)static IQueryable<T> Where(this IQueryable<T> source, Expression<Func<T,int,bool>> predicate)
这说明GetMethod无法正常工作,因为它无法让两者黯然失色。因此,我想选择正确的。
到目前为止,我经常只采取第一种或第二种方法,这取决于我的需要。像这样:
var method = typeof (Queryable).GetMethods().First(m => m.Name == "Where");var typedMethod = method.MakeGenericMethod(theTypeToInstantiate);
但是我对此并不满意,因为我做了一个很大的假设,即第一种方法是正确的。我宁愿通过参数类型找到正确的方法。但我无法弄清楚如何。
我尝试传递'类型',但它没有用。
var method = typeof (Queryable).GetMethod( "Where", BindingFlags.Static, null, new Type[] {typeof (IQueryable<T>), typeof (Expression<Func<T, bool>>)}, null);
所以有人知道如何通过反射找到'正确'的通用方法。例如,Queryable类的'Where'方法的正确版本?
白衣染霜花
慕田峪4524236
相关分类