2015-05-01 4 views
5

Ich teste Objekt wie folgt:Ist es möglich zu sehen, ob ein Objekt IDictionary ohne generische Typparameter erbt?

if (item is IDictionary<object, object>) 

Aber das alle anderen Kombination von Typen nicht <sting, object>, <int, string> usw. passen ...

Ich will nur wissen, ob es die Schnittstelle implementiert hat, unabhängig von welchen generischen Typen es benutzt.

fand ich ein Beispiel, das sagte, dass es möglich war, etwas zu tun:

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

Aber ich habe immer noch die Art Unterschrift angeben, oder es ist nicht gültig.

Ist es möglich, eine Anweisung zu erstellen, die die Schnittstelle überprüft, ohne den Typ anzugeben?

+0

Je nachdem, was Ihre endgültigen Bedürfnisse sind, wenn Sie versuchen, wenn Sie einen Wörterbuch haben, um herauszufinden, und nicht speziell IDictionary , könnten Sie in der Lage sein, für die nicht-generische IDictionary zu prüfen, anstatt dass Wörterbuch auch implementiert. Diese Lösung hängt jedoch von Ihrem Anwendungsfall ab. –

Antwort

7

Sie sind in der Nähe, die Sie wirklich nur die Syntax reparieren müssen:

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

Notiere die () nach GetGenericTypeDefinition, und das Komma innerhalb des <>.

+0

Ahhrg. Ich habe das schon so lange angeguckt und ich habe es nicht gesehen. Danke! – Guerrilla

Verwandte Themen