System.Type.GetMethodImpl C# (CSharp) Method

GetMethodImpl() private method

private GetMethodImpl ( string name, BindingFlags bindingAttr, Binder binder, CallingConventions callConvention, Type types, ParameterModifier modifiers ) : MethodInfo
name string
bindingAttr BindingFlags
binder Binder
callConvention CallingConventions
types Type
modifiers ParameterModifier
return MethodInfo
        private MethodInfo GetMethodImpl(string name, BindingFlags bindingAttr, Binder binder, CallingConventions callConvention, Type[] types, ParameterModifier[] modifiers)
        {
            foreach (var method in methods)
            {
                if (method.Name != name)
                    continue;
                if ((bindingAttr & BindingFlags.NonPublic) != BindingFlags.NonPublic && !method.IsPublic)
                    continue;
                var parameters = method.GetParametersNoCopy();
                if (types != null && types.Length != parameters.Length)
                    continue;
                if (types != null)
                {
                    bool isValid = true;
                    for (var i = 0; i < types.Length; i++)
                    {
                        if (types[i].IsGenericType && parameters[i].ParameterType.IsGenericType)
                        {
                            if (!parameters[i].ParameterType.GetGenericTypeDefinition().IsAssignableFrom(types[i].GetGenericTypeDefinition()))
                                isValid = false;
                        }
                        else if (!parameters[i].ParameterType.IsAssignableFrom(types[i]))
                            isValid = false;                        
                    }
                    if (!isValid)
                        continue;
                }
                return method;
            }
            return null;
        }