假设你有一个与方法myMethod相关的MethodInfo:
void myMethod(int param1, int param2) { }
并且要创建一个表示方法签名的字符串:
string myString = "myMethod (int, int)";
循环遍历 MethodInfo 参数,我能够通过调用参数类型的 ToString 方法来实现这些结果:
"myMethod (System.Int32, System.Int32)"
我怎样才能改进这一点并产生上面显示的结果?
这个问题之前已经问过了,可以通过CodeDom api来完成。看到这个和这个。请注意,这些关键字(int、bool 等(是特定于语言的,因此,如果要将其输出给一般 .NET 使用者,则通常首选框架类型名称。
据我所知,没有任何内置功能可以将原语(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
都是一样的 - 因此您无法找出用户实际键入的变体。