private static object InvokeMemberOnType(Type type, object target, string name, object[] args)
{
var argtypes = new Type[args.Length];
for (var i = 0; i < args.Length; i++)
{
argtypes[i] = args[i].GetType();
}
while (true)
{
//TODO: change when .net core implements GetMethod correct to get access to private methods
var member = type.GetMethods(bindingFlags).FirstOrDefault(m => m.Name == name && m.GetParameters().Select(p => p.ParameterType).SequenceEqual(argtypes));
//var member = type.GetMethod(name, bindingFlags, argtypes);
if (member != null)
{
return member.Invoke(target, args);
}
if (type.GetTypeInfo().BaseType == null)
{
return null;
}
type = type.GetTypeInfo().BaseType;
}
}