Как определить тип объектов в коллекции в C # - PullRequest
2 голосов
/ 21 августа 2010

Я пытаюсь использовать Reflection в C #, чтобы определить во время выполнения тип объектов в свойстве коллекции. Эти объекты являются объектами, сгенерированными Entity Framework:

Type t = entity.GetType();
PropertyInfo [] propInfo = t.GetProperties();
foreach(PropertyInfo pi in propInfo)
{
    if (pi.PropertyType.IsGenericType)
    {
        if (pi.PropertyType.GetGenericTypeDefinition() 
            == typeof(EntityCollection<>))   
        //  'ToString().Contains("EntityCollection"))'  removed d2 TimWi's advice
        //
        //  --->  this is where I need to get the underlying type
        //  --->  of the objects in the collection :-)
        // etc.
    }
}

Как определить тип объектов, хранящихся в коллекции?

РЕДАКТИРОВАТЬ: обновленный код выше, добавив первый запрос .IsGenericType, чтобы он работал

1 Ответ

3 голосов
/ 21 августа 2010

Вы можете использовать GetGenericArguments() для извлечения универсальных аргументов типа коллекции (например, для EntityCollection<string>, универсальный аргумент - string). Поскольку EntityCollection<> всегда имеет один универсальный аргумент, GetGenericArguments() всегда будет возвращать одноэлементный массив, поэтому вы можете безопасно получить первый элемент этого массива:

if (pi.PropertyType.IsGeneric &&
    pi.PropertyType.GetGenericTypeDefinition() == typeof(EntityCollection<>))
{
    // This is now safe
    var elementType = pi.PropertyType.GetGenericArguments()[0];

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