C# 获取MethodInfo签名
假设您有一个与方法myMethod相关的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)" 如何对此进行改进并产生上面所示的结果?据我所知,没
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中有一些东西可以做到这一点。