2015-05-01 15 views
5

sto testando oggetto come questo:È possibile vedere se un oggetto eredita IDictionary senza parametri di tipo generico?

if (item is IDictionary<object, object>) 

Ma che non hanno tutte le altre combinazioni di tipi <sting, object>, <int, string> ecc ...

Voglio solo sapere se ha implementato l'interfaccia a prescindere di che tipi generici sta usando.

Ho trovato un esempio che ha detto che era possibile fare qualcosa di simile:

dictionary.GetType().GetInterfaces().Any(x => x.GetGenericTypeDefinition == typeof(IDictionary<>)); 

Ma devo ancora specificare il tipo di firma o non è valido.

E 'possibile fare una dichiarazione che controlli l'interfaccia senza dover specificare il tipo?

+0

A seconda di cosa i vostri bisogni finali sono, se si sta cercando di scoprire se si dispone di un dizionario e non specificamente IDictionary , si potrebbe essere in grado di verificare la presenza di IDictionary non generico, invece, che Dizionario implementa anche. Tuttavia, questa soluzione dipenderà dal tuo caso d'uso. –

risposta

7

Vi sono vicino, è davvero solo bisogno di sistemare la sintassi:

dictionary.GetType().GetInterfaces().Any(x => x.GetGenericTypeDefinition() == typeof(IDictionary<,>)) 

Annotare il () dopo GetGenericTypeDefinition, e la virgola all'interno della <>.

+0

Ahhrg. Sono stato a guardare questo per così tanto tempo e non l'ho visto. Grazie! – Guerrilla

Problemi correlati