¿Cuál es la forma más fácil, dado un objeto Type
, de probar para ver si realmente se trata de una lista de objetos? Es decir. Matriz o IEnumerable/IEnumerable <>.Cómo saber si un Tipo es una lista o matriz o IEnumerable o
Respuesta
Verificar typeof(IEnumerable).IsAssignableFrom(type)
.
Cada tipo de colección, incluidas las matrices y IEnumerable<T>
, implementa IEnumerable
.
Simple. La cosa más fácil de hacer es la siguiente:
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>;
}
================================== ================
También puede probar esto que no involucra múltiples bloques try/catch. Es mejor si puede evitar el uso de estos porque cada condición es evaluada por el tiempo de ejecución durante el tiempo de ejecución ... es un código incorrecto (aunque a veces no hay forma de evitarlo).
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.
}
En lugar de hacer 'listTest = ((IList
¡Qué desorden! Al menos cuatro cosas están mal aquí. (1) Capturar excepciones en lugar de usar 'is' o' as'. (2) Captura 'Exception' en lugar de' InvalidCastException'. (3) En el segundo bloque de código, pensar C# 'is' funciona de la misma manera que VB6' Is' - en realidad '==' es el operador correcto, pero seguirá fallando porque (4) 'GetType()' siempre devuelve una clase concreta, nunca una interfaz como 'IEnumerable
if (objType.IsArray || objType.IsGenericType)
{
}
'objType.IsGenericType' devolvería' true', si es 'int?' y 'Nullable
@MatthiasBurger Lo probé devolvió falso –
@AlaMusleh ¿Devuelve verdadero para int? –
- 1. ¿Cómo saber si un objeto es un número entero o una cadena o isa booleano?
- 2. ¿Mi tipo genérico es una lista o solo un artículo?
- 3. ¿Cómo puedo saber si un MotionEvent es relativo o absoluto?
- 4. saber si .lib es estático o importar
- 5. Java: ¿Un constructor o método que aceptará una matriz o conjunto o lista o ...?
- 6. cómo saber si una cadena es base64 o no
- 7. ¿Cómo saber si un modelo es nuevo o no?
- 8. Compruebe si un argumento es una lista o un átomo
- 9. ¿Es una matriz un tipo primitivo o un objeto (o algo completamente diferente)?
- 10. Cómo saber si una instancia pertenece a un determinado Tipo o cualquier tipo derivado
- 11. ¿Cómo puedo saber si una variable de python es una cadena o una lista?
- 12. cómo detectar si un tipo es un iterador o const_iterator
- 13. ¿Cómo saber si SQL Server es local o remoto?
- 14. cómo saber si una variable es una tupla, una cadena o un número entero?
- 15. ¿Cómo se puede saber si una matriz de homografía es aceptable o no?
- 16. ¿Cómo determinar si una clave es una letra o número?
- 17. cómo saber si un UITextView tiene un foco o no
- 18. Determinar si una matriz es asociativa (hash) o no
- 19. Java, Runtime.exec o ProcessBuilder: cómo saber si el archivo es shell o binario?
- 20. ¿Cómo saber si un objeto se libera automáticamente o no?
- 21. ¿Cómo saber cuándo Big O es logarítmico?
- 22. ¿La lista vinculada es una ADT o es una estructura de datos, o ambas?
- 23. Cómo saber si un usuario está visitando "/Default.aspx" o simplemente "/"
- 24. ¿Cómo puedo saber si necesito conservar o asignar una propiedad?
- 25. ¿Cómo saber si un dll usa ASLR o no?
- 26. cómo saber si existe un atributo o no en XSL
- 27. ¿Cómo puedo saber si una ruta determinada es un directorio o un archivo? (C/C++)
- 28. ¿Cómo puedo saber si un objeto javascript es una imagen o un lienzo?
- 29. ¿Cómo puedo saber si un SPListItem es un documento o una carpeta?
- 30. ¿Puedo verificar C (++) si una matriz es 0 (o falsa)?
Gracias - que tenía que excluir 'string', ya que surgió como una matriz de' Char' y yo no quiero eso. :) –
Sí; Me olvide de eso. – SLaks
También excluye System.Xml.XmlText así como otros descendientes de System.Xml.XmlNode. –