如何在 C# 中使用泛型参数调用泛型方法?

use*_*402 6 c# generics reflection sqlite-net

我想知道如何在 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
    {
    }
Run Code Online (Sandbox Code Playgroud)

我当前的代码是:

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);
Run Code Online (Sandbox Code Playgroud)

返回的参数数量是 1 ...这是错误的,但我不知道为什么系统返回给我这个数字。

调用方法因参数数量错误而失败。

欢迎任何帮助!

小智 1

您使用 GetWithChildren 来调用它,而不是 GetAllWithChildren。