public static bool ExecuteGenericMethod(object obj, Type type, string methodName, bool isStatic, Type[] arguments, Type[] variableType, object[] parameters, out object result) { result = null; var res = InformationOnTheTypes.FindGenericMethodsWithGenericArguments(type, isStatic, methodName, arguments, variableType); if (res == null) { return(false); } try { result = res.Invoke(obj, parameters); if (result != null && res.ReturnType.GetTypeInfo().IsInterface) { result = new AutoWrap(result, res.ReturnType); } } catch (Exception) { return(false); } return(true); }
// Ищет Дженерик метод по дженерик аргументам и типам параметров // Пример использования //ТипыПараметров=ъ(Врап.ТипМассив(IParentNode.ПолучитьСсылку(),String.ПолучитьСсылку())); // ТипыАргументов=ъ(Врап.ТипМассив(IHtmlAnchorElement.ПолучитьСсылку())); ////public static TElement QuerySelector<TElement>(this IParentNode parent, string selectors) where TElement : class, IElement; //стр=Врап.FindGenericMethod(ApiExtensions.ПолучитьСсылку(),true,"QuerySelector",ТипыАргументов.ПолучитьСсылку(),ТипыПараметров.ПолучитьСсылку()); //QuerySelector_AnchorElement = ъ(стр); public static RpcMethodInfo FindGenericMethod(Type type, bool isStatic, string methodName, Type[] genericParameters, Type[] methodParameters) { var res = InformationOnTheTypes.FindGenericMethodsWithGenericArguments(type, isStatic, methodName, genericParameters, methodParameters); if (res == null) { // AutoWrap.СообщитьОбОшибке("Не найден метод "+ methodName); throw new Exception("Не найден метод " + methodName); } return(res); }