Obtener la firma de MethodInfo
-
11-12-2019 - |
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?
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.