Как узнать, является ли свойство типом List <MyClass>? - PullRequest
0 голосов
/ 03 июля 2018

У меня есть это в этих классах.

public class MyClass:BaseClass
{ }

public class BaseClass
{ }

public class CollectionClass
{
   public string SomeProperty {get; set;}

   public List<MyClass> Collection {get; set;}
}

В моем коде я хочу выяснить, является ли свойство в каком-либо объекте (например, CollectionClass) типом List<BaseClass>, также я хочу вернуть true, если свойство является типом List<MyClass>. Код ниже объясняет это.

public bool ContainsMyCollection(object obj)
{
   foreach(var property in obj.GetType().GetProperties())
   {
      //  Idk how to accomplish that
      if(property isTypeof List<BaseClass>)
         return true;
   }
   return false
}

1 Ответ

0 голосов
/ 03 июля 2018

Вам необходимо проверить, есть ли у вас закрытый тип 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>(); не удастся. Это выходит за рамки вашего вопроса, но я решила, что подумаю, если вы еще не знаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...