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;
}