Отражение было бы хорошим способом, но имейте в виду, что большинство коллекций в FCL наследуются как от ICollection<T>
, так и от ICollection
. Так что код, подобный этому, работает:
var collection = new List<int>();
Console.WriteLine(collection is ICollection<MyClass>);
Console.WriteLine(collection is ICollection);
True isвыход для обоих.Это работает для большинства, если не для всех коллекций в FCL.Если вам нужно было работать с пользовательскими коллекциями или коллекциями, которые не реализуют ICollection, то отражение - единственный способ.
Sidenote: массивы также неявно реализуют ICollection, IList и IEnumerable (CLR фактически генерирует массивкоторый наследует от универсальных версий этих классов в дополнение к неуниверсальным во время выполнения), поэтому приведенный выше код будет работать и с массивами.