Есть много причин для получения ошибок
1.ПРИЧИНА 1
Вы не указали экземпляр класса внутри Invoke
в качестве первого параметра.Код должен быть
var controlClientScript = controlType.GetMethod("MethodName").Invoke(classInstance,null);
2.ПРИЧИНА 2
Может быть несколько методов с одним и тем же именем вашего метода (перегруженный метод).В таких случаях будет отображаться следующая ошибка:
Произошло необработанное исключение типа 'System.Reflection.AmbiguousMatchException'.Найдено неоднозначное совпадение.
Таким образом, вам нужно указать, что вы вызываете метод, у которого нет параметров.Используйте код ниже.
MethodInfo mInfo = classInstance.GetType().GetMethods().FirstOrDefault
(method => method.Name == "MethodName"
&& method.GetParameters().Count() == 0);
mInfo.Invoke(classInstance, null);
3.ПРИЧИНА 3
Если вы используете Type.GetType
для получения типа класса, если класс находится в другой сборке, Type.GetType
будет нулевым.В таких случаях у вас есть цикл через Assemblies
.Используйте код ниже.
Type type = GetTheType("MyNameSpace.MyClass");
object objMyClass = Activator.CreateInstance(type);
MethodInfo mInfo = ojMyClass.GetType().GetMethods().FirstOrDefault
(method => method.Name == "MethodName"
&& method.GetParameters().Count() == 0);
mInfo.Invoke(objMyClass, null);
и GetTheType
метод здесь.Параметр GetTheType
должен быть Полное имя
public object GetTheType(string strFullyQualifiedName)
{
Type type = Type.GetType(strFullyQualifiedName);
if (type != null)
return Activator.CreateInstance(type);
foreach (var asm in AppDomain.CurrentDomain.GetAssemblies())
{
type = asm.GetType(strFullyQualifiedName);
if (type != null)
return Activator.CreateInstance(type);
}
return null;
}