Как определить, является ли тип списком или массивом, или IEnumerable, или - PullRequest
33 голосов
/ 07 ноября 2010

Какой самый простой способ при наличии объекта Type проверить, является ли он списком объектов? То есть Массив или IEnumerable / IEnumerable <>.

Ответы [ 3 ]

51 голосов
/ 07 ноября 2010

Проверка typeof(IEnumerable).IsAssignableFrom(type).

Каждый тип коллекции, включая массивы и IEnumerable<T>, реализует IEnumerable.

0 голосов
/ 12 ноября 2015
if (objType.IsArray || objType.IsGenericType)
{

}
0 голосов
/ 07 ноября 2010

Simple.Проще всего сделать следующее:

IList<T> listTest = null;

try{
     listTest = ((IList<T>)yourObject);
}
catch(Exception listException)
{
    //your object doesn't support IList and is not of type List<T>
}

IEnumerable<T> enumerableTest = null;

try{
     enumerableTest = ((IEnumerable<T>)yourObject);
}
catch(Exception enumerableException)
{
     //your object doesn't suport IEnumerable<T>;
}

=================================================

Вы также можете попробовать это, не включая несколько блоков try / catch.Лучше, если вы сможете избежать их использования, потому что каждое условие фактически оценивается средой выполнения во время выполнения ... это плохой код (хотя иногда нет никакого способа обойти это).

Type t = yourObject.GetType();

if( t is typeof(List<OjbectType>) )   //object type is string, decimal, whatever...
{
     // t is of type List<ObjectType>...
}
else if( t is typeof(IEnumerable<ObjectType>)
{
     // t is of type IEnumerable<ObjectType>...
}
else
{
    // t is some other type.
    // use reflection to find it.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...