Tengo tres listas como List<EmpRoles> , List<EmpVisibility> , List<EmpProps>.
Ahora quiero realizar ciertas operaciones en ellos. Para esto primero tengo que comprobar si la propiedad es de tipo lista o no. Tengo uso si bloque algo como a continuación
if ( propertyName == "EmpRoles" || propertyName == "EmpVis" || propertyName == "EmpProps")
¿Hay alguna forma mejor de hacer esto, o es posible poner algún tipo de (lista <>) condiciones? Sé que typeof(list<>) no funcionará aquí. O tengo que usar typeof (lista) ... ¿Alguien puede ayudar a crear una forma genérica de identificar las propiedades del tipo de lista?
Verificar que un tipo es List<T>
requiere asegurarse de que:
IsGenericType
,System.List<>
comprobando el resultado de GetGenericTypeDefinition()
contra typeof(List<>)
T
es el que desea al marcar GetGenericArguments()
Si se cumplen las tres condiciones, tienes tu tipo:
var pt = myProperty.PropertyType; if (pt.IsGenericType && pt.GetGenericTypeDefinition() == typeof(List<>)) { var elementType = pt.GetGenericArguments()[0]; if (elementType == typeof(EmpRoles)) { ... } else if (elenentType == typeof(EmpVisibility)) { ... } else if ... }
Puede obtener un parámetro genérico de la lista de la siguiente manera
var list = new List<EmpRoles> var argType = list.GetType().GenericTypeArguments[0];
Aquí en argType
obtendrá typeof(EmpRoles)