Это не отвечает на ваш вопрос напрямую, а скорее отвечает на вопрос нашего обсуждения в комментариях:
Как я могу вызвать метод Except, используя отражение?
Метод Except не является членом ICollection<T>
, поэтому ваш вызов GetMethod возвращает null.Скорее, это метод расширения, определенный для статического типа System.Linq.Enumerable
.Чтобы вызвать это с помощью рефлексии, вы должны рассматривать это как статический метод.Примерно так:
// there are two overloads of Except and I'm too lazy to construct the type parameters to get the correct overload
var methods = typeof(Enumerable).GetMethods(BindingFlags.Static | BindingFlags.Public);
var exceptMethod = methods.Where(m => m.Name.Equals("Except") && m.GetParameters().Lengh == 2).Single();
object[] arguments = new [] { currentCollection, anotherCollection };
object items = exceptMethod.Invoke(null, arguments);
Вот "простой способ" Джона Скита (C # 4.0 и позже):
dynamic items = Enumerable.Except((dynamic)currentCollection, (dynamic)anotherCollection);