Подтвердить что ты не робот

Как проверить, является ли данное значение общим списком?

public bool IsList(object value)
    {
        Type type = value.GetType();
        // Check if type is a generic list of any type
    }

Каков наилучший способ проверить, является ли данный объект списком или может быть добавлен в список?

4b9b3361

Ответ 1

if(value is IList && value.GetType().IsGenericType) {

}

Ответ 2

Для вас, ребята, пользуются методами расширения:

public static bool IsGenericList(this object o)
{
    var oType = o.GetType();
    return (oType.IsGenericType && (oType.GetGenericTypeDefinition() == typeof(List<>)));
}

Итак, мы могли бы сделать:

if(o.IsGenericList())
{
 //...
}

Ответ 3

 bool isList = o.GetType().IsGenericType 
                && o.GetType().GetGenericTypeDefinition() == typeof(IList<>));

Ответ 4

if(value is IList && value.GetType().GetGenericArguments().Length > 0)
{

}

Ответ 5

public bool IsList(object value) {
    return value is IList 
        || IsGenericList(value);
}

public bool IsGenericList(object value) {
    var type = value.GetType();
    return type.IsGenericType
        && typeof(List<>) == type.GetGenericTypeDefinition();
}

Ответ 6

Вероятно, лучший способ - сделать что-то вроде этого:

IList list = value as IList;

if (list != null)
{
    // use list in here
}

Это даст вам максимальную гибкость, а также позволит работать со многими различными типами, реализующими интерфейс IList.

Ответ 7

Основываясь на ответе Виктора Родригеса, мы можем разработать другой метод для дженериков. Фактически, исходное решение можно свести только к двум строкам:

public static bool IsGenericList(this object Value)
{
    var t = Value.GetType();
    return t.IsGenericType && t.GetGenericTypeDefinition() == typeof(List<>);
}

public static bool IsGenericList<T>(this object Value)
{
    var t = Value.GetType();
    return t.IsGenericType && t.GetGenericTypeDefinition() == typeof(List<T>);
}