Domanda

Dì che hai un metodo in relazione al metodo mymethod:

void myMethod(int param1, int param2) { }
.

E vuoi creare una stringa che rappresenta la firma del metodo:

string myString = "myMethod (int, int)";
.

Looping Attraverso i parametri MethodInFO, sono stato in grado di ottenere questi risultati chiamando i metodi di tostring dei tipi di parametri:

"myMethod (System.Int32, System.Int32)"
.

Come posso migliorare su questo e produrre i risultati mostrati sopra?

È stato utile?

Soluzione

Questa domanda è stata posta prima, e può fare attraverso l'API del codeDom.Vedere Questo e Questo .Si noti che quelle parole chiave (int, bool, ecc.) Sono specifiche della lingua, quindi se si sta emettendo questo per un consumatore .NET generale, i nomi dei tipi di framework sono solitamente preferiti.

Altri suggerimenti

Per quanto ne so, non c'è nulla di integrato che convertirà il nome reale di un nome primitivo (System.Int32) nell'alias integrato (int).Dal momento che c'è solo un numero molto piccolo di questi alias, non è troppo difficile scrivere il proprio metodo:

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
}
.

che viene detto, se l'utente effettivamente ha fatto digita in System.Int32 piuttosto che int (che ovviamente sarebbe perfettamente legale) Questa tecnica sta ancora stampando "int".Non c'è un tutto il resto che puoi fare a riguardo perché il System.Type è lo stesso in entrambi i modi - quindi non c'è modo per scoprire quale variante è effettivamente digitato l'utente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top