AutoMapper.TypeDetails.BuildPublicNoArgExtensionMethods C# (CSharp) Метод

BuildPublicNoArgExtensionMethods() приватный Метод

private BuildPublicNoArgExtensionMethods ( IEnumerable sourceExtensionMethodSearch ) : IList
sourceExtensionMethodSearch IEnumerable
Результат IList
        private IList<MethodInfo> BuildPublicNoArgExtensionMethods(IEnumerable<MethodInfo> sourceExtensionMethodSearch)
        {
            var sourceExtensionMethodSearchArray = sourceExtensionMethodSearch.ToArray();

            var explicitExtensionMethods = sourceExtensionMethodSearchArray
                .Where(method => method.GetParameters()[0].ParameterType == Type)
                .ToList();

            var genericInterfaces = Type.GetTypeInfo().ImplementedInterfaces.Where(t => t.IsGenericType()).ToList();

            if (Type.IsInterface() && Type.IsGenericType())
                genericInterfaces.Add(Type);

            explicitExtensionMethods.AddRange(
                from genericMethod in sourceExtensionMethodSearchArray
                where genericMethod.IsGenericMethodDefinition
                from genericInterface in genericInterfaces
                let genericInterfaceArguments = genericInterface.GetTypeInfo().GenericTypeArguments
                where genericMethod.GetGenericArguments().Length == genericInterfaceArguments.Length
                let methodMatch = genericMethod.MakeGenericMethod(genericInterfaceArguments)
                where methodMatch.GetParameters()[0].ParameterType.GetTypeInfo().IsAssignableFrom(genericInterface.GetTypeInfo())
                select methodMatch);

            return explicitExtensionMethods;
        }