Есть ли способ определить, является ли объект общим списком? Я не буду знать тип списка, я просто знаю, что это список. Как я могу это определить?Если объект является общим списком
ответ
Это вернет "True"
List<int> myList = new List<int>();
Console.Write(myList.GetType().IsGenericType && myList is IEnumerable);
Вы заботитесь знать, если это точно "List" ... или ты хорошо с ним быть IEnumerable, и общий?
Theres Функция GetType() в классе System.Object. Вы пробовали это?
Try:
if(yourList.GetType().IsGenericType)
{
var genericTypeParams = yourList.GetType().GetGenericArguments;
//do something interesting with the types..
}
Следующий метод возвращает тип элемента общего типа коллекции. Если тип не реализует ICollection <>, то возвращается null.
static Type GetGenericCollectionItemType(Type type)
{
if (type.IsGenericType)
{
var args = type.GetGenericArguments();
if (args.Length == 1 &&
typeof(ICollection<>).MakeGenericType(args).IsAssignableFrom(type))
{
return args[0];
}
}
return null;
}
Edit: выше решение предполагает, что заданный тип имеет общий параметр самостоятельно. Это не будет работать для типов, реализующих ICollection <> с жестко закодированным родовым параметром, например:
class PersonCollection : List<Person> {}
Вот новая реализация, которая будет обрабатывать этот случай.
static Type GetGenericCollectionItemType(Type type)
{
return type.GetInterfaces()
.Where(face => face.IsGenericType &&
face.GetGenericTypeDefinition() == typeof(ICollection<>))
.Select(face => face.GetGenericArguments()[0])
.FirstOrDefault();
}
Вопрос неоднозначный.
Ответ зависит от того, что вы подразумеваете под общим списком.
< Перечень SomeType >?
Класс, который происходит из списка <SomeType>?
класс, который реализует IList <SomeType> (в этом случае массив может рассматриваться как общий список - например, INT [] реализует IList <INT>)?
Класс, который является общим и реализует IEnumerable (это тест, предложенный в accepted answer)? Но это будет также рассматривать следующий скорее патологический класс как общий список:
.
public class MyClass<T> : IEnumerable
{
IEnumerator IEnumerable.GetEnumerator()
{
return null;
}
}
Лучшее решение (например, следует ли использовать GetType, IsAssignableFrom и т.д.) будет зависеть от того, что вы имеете в виду.
Принятый ответ не гарантирует тип IList <>. Проверить эту версию, она работает для меня:
private static bool IsList(object value)
{
var type = value.GetType();
var targetType = typeof (IList<>);
return type.GetInterfaces().Any(i => i.IsGenericType
&& i.GetGenericTypeDefinition() == targetType);
}
- 1. Тестирование, если Object является общим списком определенного типа
- 2. Пользовательский объект Javascript является общим
- 3. Как проверить, является ли данное значение общим списком?
- 4. Обнаружить, если объект является списком <String>
- 5. как объект приложения является общим для пользователей
- 6. десериализация объекта с общим списком
- 7. Связывание со списком WPF с общим списком
- 8. Могу ли я прочитать Аргумент, который является общим списком?
- 9. Определить, является ли тип общим списком типов перечисления
- 10. Является общим списком, хранящимся в памяти в памяти
- 11. Как проверить, является ли объект списком строк?
- 12. Java Многопоточность с общим списком
- 13. Связывание CheckBoxList с общим списком
- 14. WebDataGrid сортировки с общим списком
- 15. Проблема с общим связанным списком
- 16. создание сеттера с общим списком
- 17. Почему java.util.Map.get (...) не является общим?
- 18. проверить, является ли аргумент не списком, а затем отображать сообщение, если оно не является списком
- 19. C# Получить объект внутри объекта, который является общим
- 20. Является ли объект Mapper Hadoop общим для нескольких потоков?
- 21. List.Contains (item) с общим списком объектов
- 22. Функция управления общим списком в C?
- 23. Исключить объект, если объект является приватным
- 24. Тестирование, если объект является строкой
- 25. тест, если объект является Enum
- 26. проверить, если объект является пустым
- 27. Проблема с общим списком и добавлением обертки
- 28. Поддерживает ли EF Core абстрактный абстрактный объект, который является общим?
- 29. Класс с общим списком унаследованного класса
- 30. Проблема с использованием «foreach» с общим списком
событие, хотя, возможно, это не «идеальный» ответ, я не могу понять, почему он попадает минус один.Давай, ребята, это не лучший ответ, но старайтесь не навредить чьей-то репутации. – 2008-10-30 00:56:32
GetType вернет конкретный общий список, который он есть, в отличие от того, что это всего лишь общий список. – Dested 2008-10-30 00:59:11