Что является самым простым способом, учитывая объект Type
, чтобы проверить, действительно ли это список объектов? То есть Массив или IEnumerable/IEnumerable <>.Как определить, является ли тип списком или массивом или IEnumerable или
ответ
Проверить typeof(IEnumerable).IsAssignableFrom(type)
.
Каждый тип сбора, включая массивы и IEnumerable<T>
, реализует IEnumerable
.
Простой. Проще всего сделать, заключается в следующем:
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.
}
Вместо того, чтобы делать 'listTest = ((IList
Ничего себе, что за беспорядок. Здесь, по крайней мере, четыре вещи плохо. (1) Исключение исключений вместо использования 'is' или' as'. (2) Захват 'Exception' вместо' InvalidCastException'. (3) Во втором блоке кода мышление C# 'is' работает так же, как VB6' Is' - фактически '==' является правильным оператором, но он все равно будет терпеть неудачу, потому что (4) 'GetType()' always возвращает конкретный класс, никогда не имеющий интерфейса, например 'IEnumerable
if (objType.IsArray || objType.IsGenericType)
{
}
'objType.IsGenericType' возвращает' true', если это 'int?' и 'Nullable
@MatthiasBurger Я протестировал его, он вернул false –
@AlaMusleh Он возвращает True для int? –
- 1. объект является массивом или IEnumerable
- 2. Является ли NodeList массивом или списком или чем-то еще?
- 3. Является ли ArrayList массивом или списком?
- 4. Определить, является ли объект массивом или строкой
- 5. Как определить, является ли это объектом или массивом?
- 6. Как определить тип шаблона, является ли базовый тип или класс
- 7. В KRL, как определить, является ли переменная массивом или хешем?
- 8. python: как определить, является ли переменная массивом или скаляром
- 9. Как определить, является ли параметр массивом или объектом в JavaScript?
- 10. Как определить, является ли данный объект массивом или объектом?
- 11. Как определить, является ли переменная массивом объектов или нет?
- 12. Является ли arrayList в Java массивом или списком?
- 13. Как определить, является ли переменная python строкой или списком?
- 14. Проверьте, является ли Object словарем или списком
- 15. Определить матрицу int с массивом, списком или картой в OCaml?
- 16. Как определить, является ли тип запроса синхронным или асинхронным.
- 17. Как определить, является ли тип запроса SQL DML или DDL?
- 18. Как определить, является ли тип DataColumn числовым, строковым или datetime?
- 19. Как определить, является ли тип сети 2G, 3G или 4G
- 20. Как это сделать со списком или массивом?
- 21. Проверьте, является ли переменная числом или массивом
- 22. Является ли мой JSON массивом или объектом?
- 23. Как определить, является ли класс или объект одиночным или нет?
- 24. Проверьте, является ли переменная списком или кортежем
- 25. Проверьте, является ли объект массивом или Dict
- 26. Как определить, является ли переменная строкой или списком, или иными словами в SIkuli?
- 27. Как определить, является ли тип поля списком (или любым другим типом коллекций) с использованием отражения?
- 28. Как определить, является ли что-то Array или Object?
- 29. Как определить «имя» или тип настраиваемого объекта?
- 30. Определить, является ли Абсолютный или Относительный URL
Спасибо - я должен был исключить 'string', потому что придумал как массив' Char', и я не хочу этого. :) –
Да; Я забыл об этом. – SLaks
Также исключает System.Xml.XmlText, а также другие потомки System.Xml.XmlNode. –