Voglio testare un oggetto per vedere se implementa IDictionary<TKey,TValue>
ma non mi interessa cosa sono TKey
e TValue
.Verificare se un oggetto implementa un'interfaccia generica per qualsiasi tipo generico
posso testare se è un'istanza concreta del quadro Dictionary<,>
in questo modo:
bool isDict = type.IsGenericType &&
(typeof(Dictionary<,>).IsAssignableFrom(type.GetGenericTypeDefinition());
ma non riesco a pensare a un modo per testare qualcosa che implementa IDictionary<,>
. Questa tecnica non funziona per l'interfaccia; IsAssignableFrom
restituisce false se eseguo il test contro il tipo di base generico IDictionary<,>
, che sembra strano poiché funziona per il tipo concreto.
Normalmente si utilizzerà is
per verificare se qualcosa implementa un'interfaccia, ma ovviamente funziona solo se si desidera testare per un'interfaccia generica specifica. O semplicemente testerei per un'interfaccia ancestrale comune, ma a differenza di altre strutture di dati generici come IList<>
e ICollection<>
, non esiste un'interfaccia non generica unica da cui erediti il generico IDictionary<TKey,TValue>
.
Mi piace. Come ho trascurato GetInterfaces? –