C# 获取MethodInfo签名

C# 获取MethodInfo签名,c#,string,reflection,signature,methodinfo,C#,String,Reflection,Signature,Methodinfo,假设您有一个与方法myMethod相关的MethodInfo: void myMethod(int param1, int param2) { } 您希望创建一个表示方法签名的字符串: string myString = "myMethod (int, int)"; 通过遍历MethodInfo参数,我能够通过调用参数类型的ToString方法来实现这些结果: "myMethod (System.Int32, System.Int32)" 如何对此进行改进并产生上面所示的结果?据我所知,没

假设您有一个与方法myMethod相关的MethodInfo:

void myMethod(int param1, int param2) { }
您希望创建一个表示方法签名的字符串:

string myString = "myMethod (int, int)";
通过遍历MethodInfo参数,我能够通过调用参数类型的ToString方法来实现这些结果:

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

如何对此进行改进并产生上面所示的结果?

据我所知,没有任何内置功能可以将原语(
System.Int32
)的真实类型名转换为内置别名(
int
)。由于这些别名的数量非常少,因此编写自己的方法并不太困难:

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
}

这就是说,如果用户确实输入了
System.Int32
,而不是
int
(这当然是完全合法的),这种技术仍然会打印出“int”。您对此无能为力,因为
System.Type
两种方式都是一样的,所以您无法找出用户实际键入的变体。

这个问题以前有人问过,可以通过CodeDom api来解决。见和。请注意,这些关键字(int、bool等)是特定于语言的,因此,如果您是为一般.NET使用者输出这些关键字,通常会首选框架类型名称。

myMethod的情况不应该发生更改-
Sysetm.Int32
vs.
int
部分?对不起,那是一个打字错误,现在已经被纠正了。是的,我的问题是以声明的方式显示类型的名称。我想知道是否有比为每种类型硬编码字符串更好的解决方案。IIRC CodeDom中有一些东西可以做到这一点。