Type.GetMethod с универсальной перегрузкой - получить универсальный MethodInfo без циклического перебора всех методов
У меня есть две функции:
public void DeleteRecord(int id);
public T DeleteRecord<T>(int id);
Вот как я пытаюсь динамически вызывать универсальный метод:
MethodInfo method = typeof(DAL).GetMethod("DeleteRecord", new[] { typeof(int) });
MethodInfo generic = method.MakeGenericMethod(returnType);
object o = generic.Invoke(null, new object[] { dbname, spname, expandoAsDictionary });
Первая строка выдает исключение, потому что находит неоднозначное определение. Есть ли способ, которым я могу получить MethodInfo
универсального метода без использования GetMethods
и просматривая результаты с просьбой IsGenericMethod
?
Редактировать: Пожалуйста, удалите "Дубликат", потому что оба предложенных ответа либо решают это с помощью внутреннего цикла (GetMethods().Select...), либо даже не обращаются к перегрузкам.
1 ответ
Возможно, не точное решение вашей проблемы, но, возможно, вы могли бы быть счастливы с этим решением:
var generic = typeof(BadFoo).GetMethods().FirstOrDefault(p => p.IsStatic == true && p.Name == "DeleteRecord" && p.ReturnType == typeof(Int32));
Я думал, что будет как "FullName" для метода, так GetMethod()
могут быть вызовы с FullName, чтобы получить уникальный метод. Но в методе нет другого свойства, кроме имени.