Перед ядром Dotnet мы были в состоянии сделатьКак я могу получить защищенный метод с помощью названия соответствия отражения и типа параметров?
var member = type.GetMethod(name, bindingFlags, null, argtypes, null);
Чтобы получить доступ к методу сопоставления названия и параметры типа, в ядре Dotnet они убрали эту перегрузку, теперь я могу получить только name && binding flags
ИЛИ name && parameters type
(see) , но не как раньше.
Существует новый метод GetRuntimeMethods, который возвращает IEnumerable<MethodInfo>
и включает в себя не общедоступные методы, но я не могу фильтровать по типу параметров.
Существует еще один метод GetRuntimeMethod, который я могу фильтровать по типу параметров, но он не включает в себя не публичные методы.
Я уже пытался что-то вроде этого, но терпит неудачу
var member = type.GetRuntimeMethods().Where(m =>
m.Name == name && (m.GetParameters().Select(p => p.GetType()).ToArray() == argtypes)).FirstOrDefault();
Есть ли способ, чтобы получить метод по его имени и параметров типа?
Я не думаю, что можно сравнивать массивы вроде этого:. 'M.GetParameters() Выбрать (р => p.GetType()) .ToArray() == argtypes) '- он не будет сравнивать элементы массива, а ссылки массива, чтобы он всегда был ложным. Вы можете использовать 'Zip' или' SequenceEqual' для сравнения содержимого массивов. – Pawel