Pregunta

Supongamos que tiene una información de método relacionada con el método myMethod:

void myMethod(int param1, int param2) { }

y desea crear una cadena que represente la firma del método:

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

Al recorrer los parámetros de MethodInfo, pude lograr estos resultados llamando a los métodos ToString de los tipos de parámetros:

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

¿Cómo puedo mejorar esto y producir los resultados que se muestran arriba?

¿Fue útil?

Solución

Esta pregunta se ha preguntado antes, y puede hacerlo a través de la API CODEDOM.Consulte este y este .Tenga en cuenta que esas palabras clave (INT, BOOL, etc.) son específicas del lenguaje, por lo que si está enviando esto para un consumidor general .NET, generalmente se prefieren los nombres de los tipos de marco.

Otros consejos

Hasta donde yo sé, no hay nada incorporado que convierta el real escriba el nombre de una primitiva (System.Int32) al alias incorporado (int).Dado que sólo hay una cantidad muy pequeña de estos alias, no es demasiado difícil escribir su propio 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
}

Dicho esto, si el usuario realmente hizo escribir System.Int32 en vez de int (lo que por supuesto sería perfectamente legal) esta técnica aún imprimiría "int".No hay mucho que puedas hacer al respecto porque el System.Type es el mismo de cualquier manera, por lo que no hay forma de saber qué variante escribió realmente el usuario.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top