Obtenez des paramètres génériques d'un byreferenceType avec mono.cecil
-
14-11-2019 - |
Question
J'ai une méthode qui obtient un paramètre tel que:
public void Foo(ref Action<string> bar);
Utiliser Cecil pour énumérer les paramètres génère un parierypeType.Appelant GetElementtype () Dans une tentative de Dréréférence, le paramètre renvoie une typégraphe avec FULLNAME:
System.Action`1
En quelque sorte, il a perdu les paramètres génériques et n'est plus un générique du type.
Comment puis-je désactiver correctement le paramètre BYREF et accéder au type d'instance générique actuel?
La solution
Vous pouvez plonger dans le typessec en utilisant ceci (vous pouvez bien sûr le rendre plus court lorsque vous savez ce que vous avez après):
ParameterDefinition parameter = ...;
ByReferenceType byref = (ByReferenceType) parameter.ParameterType;
GenericInstanceType action_string = (GenericInstanceType) byref.ElementType;
TypeReference action = action_string.ElementType;
TypeReference str = action_string.GenericArguments [0];
La méthode GetElementtype renvoie le type d'élément d'origine à partir duquel TypePec est construit.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow