2009-12-24 33 views
23

Tengo una clase que tiene algunas propiedades de tipo List<float>, List<int> etc. Ahora estoy cuestionando las propiedades de esta clase a través de la reflexión para obtener una lista de PropertyInfo.¿Cómo comparar tipos genéricos?

Quiero filtrar los tipos que son del tipo List<>. Pero la comparación

propertyInfo.PropertyType == typeof(List<>) 

falla.

puedo evitar esto mediante la comparación de los nombres, es decir, la siguiente comparación funciona:

propertyInfo.PropertyType.Name == typeof(List<>).Name 

Creo que debe haber una mejor manera de comparar los tipos genéricos. ¿Alguna pista?

Respuesta

49

Se puede utilizar:

Type type = propertyInfo.PropertyType; 
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(List<>)) 
{ 
    ... 
}