C # Найдите метод по имени и запустите его (метод IEnumerator)

#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’ через отражение.