using System; using System.Collections.Generic; using System.Reflection; using System.Linq; public class Test { public void Delete(T obj) where T : class {} public void Delete(ICollection obj) where T : class {} public static MethodInfo GetMethod(Type type) { var res = type .GetRuntimeMethods() .Where(x => x.Name.Equals("Delete")) .Select(m => new {Method = m, Parameters = m.GetParameters()}) .FirstOrDefault(p => p.Parameters.Length == 1 && p.Parameters[0].ParameterType.IsGenericType && p.Parameters[0].ParameterType.GetGenericTypeDefinition() == typeof(ICollection<>) ); return res != null ? res.Method : null; } public static void Main() { Console.WriteLine(GetMethod(typeof(Test))); } }