.NET come confrontare il tipo di tipo generico
Domanda
Voglio filtrare una raccolta di proprietà per trovare tutte le proprietà di tipo EntityCollection<>
così:
entity.GetProperties().Where(p => p.PropertyType == typeof(EntityCollection<>));
Il codice sopra non restituirà sempre alcun risultato perché le proprietà saranno di tipo EntityCollection<TEntity>
dove TEntity
è un EntityObject
.
Ho anche provato a usare EntityCollection<EntityObject>
senza successo.
Non mi interessa il tipo specifico di TEntity
, Voglio solo proprietà di tipo EntityCollection<>
indipendentemente dal tipo di TEntity
.
Sembra che dovrebbe essere semplice, mi manca un trucco qui? :-)
Soluzione
Bene, potresti usare:
Where(p => p.PropertyType.IsGenericType &&
p.PropertyType.GetGenericTypeDefinition() == typeof(EntityCollection<>))
È quello che stai cercando? Nota che questo non troverà sottotipi di EntityCollection<TEntity>
.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow