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?

Était-ce utile?

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
scroll top