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?

Foi útil?

Solução

Esta pergunta já foi feita antes e pode ser feita por meio da API CodeDom.Ver esse e esse.Observe que essas palavras-chave (int, bool, etc.) são específicas do idioma; portanto, se você estiver enviando isso para um consumidor .NET geral, os nomes dos tipos de estrutura geralmente serão preferidos.

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top