我想知道如何在C#中使用反射来调用以下方法:
返回结果:
public static List<T> GetAllWithChildren<T>
(this SQLiteConnection conn, Expression<Func<T, bool>> filter = null, bool recursive = false)
where T
#if USING_MVVMCROSS: new() #else : class #endif
{
}
我的当前代码是:
MethodInfo methodInfo = typeof(ReadOperations).GetMethod("GetWithChildren", BindingFlags.Static | BindingFlags.Public | BindingFlags.FlattenHierarchy);
Type predicateType = predicate.GetType();
MethodInfo genericMethod = methodInfo.MakeGenericMethod(predicateType);
Type[] genericArgumentsType = genericMethod.GetGenericArguments();
Debug.WriteLine("Arguments Number:" + genericArgumentsType.Count());
int count = 0;
foreach (Type ga in genericArgumentsType)
{
Console.WriteLine(count++ + " " + ga.GetType());
}
Object[] genericArguments = { conn, predicate, true };
genericMethod.Invoke(conn, genericArguments);
返回结果:
返回的参数数量为1...,但我不知道为什么系统会返回这个数字。
调用方法时出现参数数量不正确的错误。
欢迎提供任何帮助!
T
)。 参数 的数量为 3 (SQLiteConnection conn
、Expression<Func<T, bool>> filter
和bool recursive
)。 您可以通过调用GetParameters
来获取这些参数。 - D StanleypredicateType
将是Expression<Func<T, bool>>
,这不是调用MakeGenericMethod
时使用的正确类型。 - D Stanley