Вам необходимо проверить, есть ли у вас закрытый тип List<>
. Это можно сделать так:
if(property.PropertyType.IsGenericType
&& property.PropertyType.GetGenericTypeDefinition() == typeof(List<>))
и затем вы должны проверить, присваивается ли общий аргумент (часть T
List<T>
) вашему базовому типу:
if (typeof(BaseClass).IsAssignableFrom(property.PropertyType.GetGenericArguments()[0]))
Сложив это, вы получите:
public bool ContainsMyCollection(object obj)
{
foreach(var property in obj.GetType().GetProperties())
{
// Idk how to accomplish that
if(property.PropertyType.IsGenericType
&& property.PropertyType.GetGenericTypeDefinition() == typeof(List<>)
&& typeof(BaseClass).IsAssignableFrom(property.PropertyType.GetGenericArguments()[0]))
{
return true;
}
}
return false;
}
Обратите внимание, что, как объясняется в комментариях, List<MyClass>
не является производным от List<BaseClass>
, даже если MyClass
получено из BaseClass
. Так, например, List<BaseClass> a = new List<MyClass>();
не удастся. Это выходит за рамки вашего вопроса, но я решила, что подумаю, если вы еще не знаете.