Obtenha assinatura MethodInfo
-
11-12-2019 - |
Pergunta
Digamos que você tenha um MethodInfo relacionado ao método myMethod:
void myMethod(int param1, int param2) { }
e você deseja criar uma string que represente a assinatura do método:
string myString = "myMethod (int, int)";
Percorrendo os parâmetros MethodInfo, consegui obter esses resultados chamando os métodos ToString dos tipos de parâmetro:
"myMethod (System.Int32, System.Int32)"
Como posso melhorar isso e produzir os resultados mostrados acima?
Solução
Outras dicas
Pelo que eu sei, não há nada embutido que converta o real nome do tipo de um primitivo (System.Int32
) para o alias integrado (int
).Como há apenas um número muito pequeno desses aliases, não é muito difícil escrever seu próprio método:
public static string GetTypeName(Type type)
{
if (type == typeof(int)) // Or "type == typeof(System.Int32)" -- same either way
return "int";
else if (type == typeof(long))
return "long";
...
else
return type.Name; // Or "type.FullName" -- not sure if you want the namespace
}
Dito isto, se o usuário realmente fez digitar System.Int32
em vez de int
(o que obviamente seria perfeitamente legal) esta técnica ainda imprimiria "int".Não há muito que você possa fazer sobre isso porque o System.Type
é o mesmo de qualquer maneira - portanto, não há como descobrir qual variante o usuário realmente digitou.