Вы можете использовать этот фрагмент кода, чтобы определить, реализует ли конкретный тип интерфейс IEnumerable<T>
.
Type type = typeof(ICollection<string>);
bool isEnumerable = type.GetInterfaces() // Get all interfaces.
.Where(i => i.IsGenericType) // Filter to only generic.
.Select(i => i.GetGenericTypeDefinition()) // Get their generic def.
.Where(i => i == typeof(IEnumerable<>)) // Get those which match.
.Count() > 0;
Это будет работать для любого интерфейса, однако не будет работать, если тип, который вы передаете, - IEnumerable<T>
.
Вы должны иметь возможность изменить его для проверки аргументов типа, передаваемых каждому интерфейсу.