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:
'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 ...
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.
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)
:
Ich weiß nicht, ob Sie Mono.Cecil anstelle von .Net's Reflektion in Betracht gezogen haben.
%Vor% dann gibt myMethodDef.FullName
zurück
und classDef.GenericParameters[0].FullName
gibt
Beachten Sie, dass Mono.Cecil eine andere Schreibweise für Generics, verschachtelte Klassen und Arrays verwendet:
%Vor%Tags und Links .net c# reflection