//CONFORMING
private static MethodInfo FindMethod(Type type, string methodName, Type[] typeArgs, Expression[] args, BindingFlags flags)
{
MemberInfo[] members = type.FindMembers(MemberTypes.Method, flags, Type.FilterNameIgnoreCase, methodName);
if (members == null || members.Length == 0)
{
throw Error.MethodDoesNotExistOnType(methodName, type);
}
MethodInfo method;
var methodInfos = members.Map(t => (MethodInfo)t);
int count = FindBestMethod(methodInfos, typeArgs, args, out method);
if (count == 0)
{
throw Error.MethodWithArgsDoesNotExistOnType(methodName, type);
}
if (count > 1)
{
throw Error.MethodWithMoreThanOneMatch(methodName, type);
}
return(method);
}