Gibt es eine Möglichkeit, festzustellen, ob ein generischer Typ aus einer bestimmten generischen Typdefinition erstellt wurde?

Ich habe eine generische Methode:

Func<IEnumerable<T>, bool> CreateFunction<T>()

woT kann eine beliebige Anzahl verschiedener Typen sein. Diese Methode macht eine Menge Sachen mit Reflektion und wennT ist einIDictionary, unabhängig vom @ des WörterbucTKey undTValue Ich muss wörterbuchspezifischen Code ausführen.

So könnte die Methode aufgerufen werden:

var f = CreateFunction<string>();
var f0 = CreateFunction<SomePocoType>();
var f1 = CreateFunction<IDictionary<string,object>>();
var f2 = CreateFunction<Dictionary<string,object>>();
var f3 = CreateFunction<SomeDerivedDictionaryType<string,object>>();

etc

Erklärung per @ Andy Antwort

ch möchte unbedingt wissen, obT erbt von / implementiertIDictionary selbst wennT selbst istDictionary oder ein anderer Typ, der von dieser Schnittstelle abgeleitet ist.

if(typeof(T) == typeof(IDictionary<,>)

funktioniert nicht, weilT ist der generische Typ, nicht die generische Typdefinition.

nd ohne es zu wissTKey undTValue (die zur Kompilierungszeit nicht bekannt sind) Ich kann keinen Vergleich mit einem konkreten Typ anstellen, den ich bis zur Laufzeit kennen würde.

Das Einzige, was ich mir ausgedacht habe, ist, den Namen des Typs zu überprüfen oder seine Methode mit Reflektion zu untersuchen, und nach Methoden zu suchen, die mich glauben lassen, dass es sich um ein Wörterbuch handelt (d. H. Nach @ suchContainsKey undget_Item).

ibt es einen einfachen Weg, um diese Art von Bestimmung zu treffe

Antworten auf die Frage(8)

Ihre Antwort auf die Frage