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