我想知道如何使用反射在C#中調用下面的方法:如何在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 ...,它是錯了,但我不知道爲什麼系統返回給我這個數字。
invoke方法失敗,參數數量錯誤。
任何幫助將受到歡迎!
_Generic arguments_的數量是一個('T')。 _parameters_的數量是3('SQLiteConnection conn','Expression> filter'和'bool recursive')。您可以通過調用'GetParameters'來獲取參數。 –
還要注意'predicateType'將會是'Expression>'這不是在調用'MakeGenericMethod'時使用的正確類型。 –