So erhalten Sie MethodInfo für einen geöffneten generischen Typ aus MethodInfo des geschlossenen Typs

9

Angenommen, ich habe eine Klasse wie folgt:

%Vor%

Nun nehme ich an, ich habe eine Instanz von MyClass<int> und eine MethodInfo ihrer Foo -Methode. Der Aufruf von methodInfo.GetParameters() gibt ein ParameterInfo -Array mit einem Eintrag zurück, der sich auf den Typ int bezieht. Mein Problem ist, dass ich nicht herausfinden kann, ob dieser Parameter als int in der Klasse oder als T deklariert wurde.

Was versuche ich zu erreichen?
Zur Laufzeit möchte ich die Dokumentation der von MethodInfo angegebenen Methode aus der von Visual Studio generierten XML-Doc-Datei lesen.
Für die oben definierte Methode sieht der Schlüssel folgendermaßen aus:

%Vor%

'0 bezieht sich auf den ersten generischen Typparameter der deklarierenden Klasse. Um diese Zeichenfolge konstruieren zu können, muss ich diese Information irgendwie erhalten.
Aber wie? MethodInfo scheint diese Information nicht zu enthalten ...

    
Daniel Hilgarth 28.10.2012, 11:44
quelle

3 Antworten

3

Der Schlüssel scheint Type.ContainsGenericParameters für den Parametertyp zu sein:

Gegeben

%Vor%

Dann

%Vor%

Ausgaben

%Vor%

Dies wird offensichtlich mehr Arbeit für Überladungen und so weiter benötigen.

    
AakashM 22.11.2012, 11:16
quelle
1

Können Sie die Definition der generischen Klasse über Type.GetGenericTypeDefinition-Methode und finde dort die Definition für dieselbe Methode, sagen wir nach Namen (und der Signatur), und vergleiche dann Foo(T t) und Foo(int t) :

%Vor%     
horgh 28.10.2012 12:17
quelle
1

Ich weiß nicht, ob Sie Mono.Cecil anstelle von .Net's Reflektion in Betracht gezogen haben.

%Vor%

dann gibt myMethodDef.FullName zurück

%Vor%

und classDef.GenericParameters[0].FullName gibt

zurück %Vor%

Beachten Sie, dass Mono.Cecil eine andere Schreibweise für Generics, verschachtelte Klassen und Arrays verwendet:

%Vor%     
user276648 22.11.2012 09:37
quelle

Tags und Links