Я пытаюсь вызвать универсальный метод во время выполнения, и у меня есть рабочий код. Тем не менее, мне было интересно, если есть лучший способ получить информацию о методе, как я должен изменить имя метода, он сломается.
public int Handle<T>(CreateCodeModel obj) where T : CodeModel
{
//Create code here...
}
//codeType is selected by user.
public int Handle(CreateCodeModel obj, Type codeType)
{
MethodInfo method = this.GetType().GetMethod("Handle");
//MethodInfo method = this.GetType().GetMethods()
.Where(mi => mi.IsGenericMethod && mi.Name == "Handle").First();
MethodInfo genericMethod = method.MakeGenericMethod(new Type[] { codeType });
return (int)genericMethod.Invoke(this, new object[] { obj });
}
Я надеялся, что есть более хороший способ сделать это, возможно, с помощью действий, чтобы получить информацию о методе, но тогда мне все еще нужно предоставить тип, например,
Action<CreateCodeModel> h = (x) => Handle(x);
MethodInfo method = h.Method;