private object[] GetMethods(object target, List<string> methodNames, List<Type> methodTypes)
{
if (methodNames.Count != methodTypes.Count)
throw new ArgumentOutOfRangeException("methodTypes", "methodNames and methodTypes must be the same length");
MethodInfo[] methods = target.GetType().GetMethods(
BindingFlags.Public
| BindingFlags.NonPublic
| BindingFlags.Instance
| BindingFlags.FlattenHierarchy);
object[] retMethods = new object[methodNames.Count];
foreach (var method in methods)
{
var ind = methodNames.IndexOf(method.Name);
if (ind != -1)
{
retMethods[ind] = Delegate.CreateDelegate(methodTypes[ind], target, method, false);
}
}
return retMethods;
}