public bool IsList(object value)
{
Type type = value.GetType();
// Check if type is a generic list of any type
}
Каков наилучший способ проверить, является ли данный объект списком или может быть добавлен в список?
public bool IsList(object value)
{
Type type = value.GetType();
// Check if type is a generic list of any type
}
Каков наилучший способ проверить, является ли данный объект списком или может быть добавлен в список?
if(value is IList && value.GetType().IsGenericType) {
}
Для вас, ребята, пользуются методами расширения:
public static bool IsGenericList(this object o)
{
var oType = o.GetType();
return (oType.IsGenericType && (oType.GetGenericTypeDefinition() == typeof(List<>)));
}
Итак, мы могли бы сделать:
if(o.IsGenericList())
{
//...
}
bool isList = o.GetType().IsGenericType
&& o.GetType().GetGenericTypeDefinition() == typeof(IList<>));
if(value is IList && value.GetType().GetGenericArguments().Length > 0)
{
}
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();
}
Вероятно, лучший способ - сделать что-то вроде этого:
IList list = value as IList;
if (list != null)
{
// use list in here
}
Это даст вам максимальную гибкость, а также позволит работать со многими различными типами, реализующими интерфейс IList
.
Основываясь на ответе Виктора Родригеса, мы можем разработать другой метод для дженериков. Фактически, исходное решение можно свести только к двум строкам:
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>);
}