우리는 DOTNET 코어 그들이 지금은 name && binding flags
또는 name && parameters type
(see)에 의해 얻을 수 있습니다,이 오버로드를 제거, 이름과 매개 변수 유형을 일치하는 방법에 대한 액세스 권한을 얻으려면반사 일치하는 이름과 매개 변수 유형을 통해 보호 된 메소드를 얻으려면 어떻게해야합니까? DOTNET 코어 전에
var member = type.GetMethod(name, bindingFlags, null, argtypes, null);
을 할 수 있었다 , 전에는 좋아하지 않아.
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 => p.GetType를 선택()) .ToArray() == argtypes)'- 배열 항목과 배열 참조를 비교하지 않으므로 항상 거짓입니다. 'Zip' 또는'SequenceEqual'을 사용하여 배열 내용을 비교할 수 있습니다. – Pawel