2009-08-08 6 views
3

Gibt es eine Möglichkeit, die .NET 4.0 (oder frühere) Reflection API einen generischen Typparameter aufzulösen? Sehen Sie sich die zwei Zeilen nach meinem ArgumentException-Kommentar für meinen aktuellen Versuch an.Auflösen des Metadatentokens eines generischen Typparameters

[TestMethod] 
public void TestGenericParameterTokenResolution() 
{ 
    Type genericParameter = typeof(List<>).GetGenericArguments()[0]; 
    Assert.IsTrue(genericParameter.IsGenericParameter); 
    int metadataToken = genericParameter.MetadataToken; 

    // make sure the metadata token is a GenericParam 
    Assert.AreEqual(metadataToken & 0xFF000000, 0x2A000000); 

    Module module = typeof(List<>).Module; 
    // the following both throw an ArgumentException. 
    Type resolvedParameter = module.ResolveType(metadataToken); 
    resolvedParameter = (Type)module.ResolveMember(metadataToken); 

    Assert.AreSame(genericParameter, resolvedParameter); 
} 

Antwort

0

Was ist mit der Überlastung Module.ResolveType(int, Type[], Type[])?

+0

Das ist für etwas anderes verwendet. Ich habe derzeit kein Beispiel in C# -Code seiner Verwendung - es ist wahrscheinlich nicht das, was Sie denken, dass es ist. 'typeof (Liste )! = typeof (Liste <>) Module.Resolve (typeof (Liste <>). MetadataToken, neuer Typ {typeof (int)}, null)' –

+0

Die interne Repräsentation des Basistyps von ' KeyedCollection 'ist ein TypeSpec-Metadatentoken für' Collection ', wobei' TItem' auf den entsprechenden generischen Parameter von 'KeyedCollection' verweist. Um diese TypeSpec aufzulösen, müssen Sie 'typeof (KeyedCollection <,>) .GetGenericArguments()' an 'ResolveType' übergeben. Ich weiß jedoch in C# nicht, wie dieses TypeSpec-Token dazu gebracht wird, Ihnen dies in Aktion zu zeigen. –

+0

Ja, ich verstehe .. Ich glaube, ich habe irgendwo eine Liste von Dingen gelesen, die Reflection mit Metadaten nicht machen kann, und ich denke, das fällt darunter. Klingt aber interessant. Haben Sie sich jemals die Unmanaged API für Metadaten angesehen? –

Verwandte Themen