Type.GetMethod с универсальной перегрузкой - получить универсальный MethodInfo без циклического перебора всех методов

У меня есть две функции:

  1. public void DeleteRecord(int id);
  2. 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, чтобы получить уникальный метод. Но в методе нет другого свойства, кроме имени.

Другие вопросы по тегам