#c# #reflection
#c# #отражение
Вопрос:
Я пытаюсь извлечь и запустить функцию внутри какого-либо другого объекта в соответствии с его именем.
Так, например, учитывая следующий класс:
public class A
{
public IEnumerator func1()
{
print("function 1");
yield break;
}
}
Я пытаюсь получить func1 и запустить его.
Моя попытка:
public static MethodInfo GetMethodByName(object obj, string methodName)
{
return obj.GetType().GetMethods().FirstOrDefault(m => m.Name == methodName);
}
затем:
Startcoroutine((IEnumerator)GetMethodByName(classAObject, "func1"));
ОШИБКА, КОТОРУЮ я ПОЛУЧАЮ:
«Указанное приведение недопустимо»
Есть идеи? Спасибо!
Ответ №1:
вы пытаетесь преобразовать a MethodInfo
в a IEnumerator
. Вероятно, вы хотите вызвать MethodInfo .Вызовите и приведите результат, т.е.
(IEnumerator)(GetMethodByName(classAObject, "func1").Invoke(classAObject, null)))
Комментарии:
1. Спасибо, это работает! Однако я не совсем уверен, почему. Я думал, что вызов ienumerators просто запускает их * Я забыл упомянуть, что я намерен сохранить ienumerator в переменной для последующего использования
2. @go fast вы не вызываете ienumerator, вы вызываете MethodInfo, то есть вызываете ‘func1’ через отражение.