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)