Unfortunately, to get generic generic methods using Type.GetMethod(string name, Type[] types), you need to provide a method for the correct generic types in Type[], which means that when you try to do this:
Type requiredType = typeof(IEnumerable<>);
typeof(Enumerable).GetMethod("SequenceEqual", new Type[] { requiredType, requiredType });
You really needed to do something like this:
Type requiredType = typeof(IEnumerable<TSource>);
typeof(Enumerable).GetMethod("SequenceEqual", new Type[] { requiredType, requiredType });
SequenceEqual, IEnumerable<TSource> not IEnumerable<>.
public static IEnumerable<TSource> SequenceEqual<TSource>(this IEnumerable<TSource> first, IEnumerable<TSource> second);
: TSource, .
, IEnumerable<TSource> - , :
MethodInfo info = typeof(Enumerable)
.GetMethods(BindingFlags.Static | BindingFlags.Public)
.Where(x => x.Name.Contains("SequenceEqual"))
.Single(x => x.GetParameters().Length == 2);
Type genericType = typeof(IEnumerable<>).MakeGenericType(infos.GetGenericArguments());
,
typeof(Enumerable).GetMethod("SequenceEqual", new Type[] { genericType, genericType });
SequenceEqual , , GetMethod GetMethods * ( CAN Binder GetMethod, , , , , ).