0

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

void myMethod(int param1, int param2) { }

并且您想创建一个表示方法签名的字符串:

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

通过 MethodInfo 参数循环,我能够通过调用参数类型的 ToString 方法来实现这些结果:

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

我怎样才能改进这一点并产生上面显示的结果?

4

2 回答 2

0

据我所知,没有任何内置功能可以将原始类型的真实类型名称 ( 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无论哪种方式都是相同的——因此您无法找出用户实际键入的变体。

于 2012-05-18T19:28:32.603 回答
0

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

于 2012-05-19T05:41:53.150 回答