Я использую Reflection для извлечения methodInfo из универсального метода:
public abstract class BaseIdea {}
public class ModuleBaseLogic {
public void Sponsor<T>(int id) {
// Do something
}
}
public class Caller {
protected static MethodInfo GetMethod<T>(Expression<Action<T>> expr)
{
return ((MethodCallExpression)expr.Body).Method.GetGenericMethodDefinition();
}
public Caller() {
MethodInfo method = GetMethod<ModuleBaseLogic>(q => q.Sponsor<object>(id));
}
}
Это прекрасно работает.Однако, если метод имеет ограничения, такие как:
public void Sponsor<T>(int id) where T : BaseIdea, new() {
// Do something
}
q.Sponsor<object>
(внутри Caller) не компилируется:
Тип "объект" не может использоваться в качестве параметра типа "T 'в универсальном типе или методе' ModuleBaseLogic.Sponsor (int) 'Не существует неявного преобразования ссылок из' object 'в' BaseIdea '.
Я пытался заменить его на q.Sponsor<BaseIdea>
, но этотоже не работает