2009-12-24 9 views
23

Ho una classe che ha alcune proprietà di tipo List<float>, List<int> ecc. Ora sto interrogando le proprietà di questa classe tramite il reflection in modo da ottenere un elenco di PropertyInfo.Come confrontare i tipi generici?

Desidero filtrare i tipi di tipo List<>. Ma il confronto

propertyInfo.PropertyType == typeof(List<>) 

fallisce.

posso ottenere intorno a questo confrontando i nomi, vale a dire, il seguente confronto funziona:

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

penso che ci dovrebbe essere un modo migliore per confrontare i tipi generici. Qualche indizio?

risposta

49

È possibile utilizzare:

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