none
反射技术显示类型的应字符串问题(有示例) RRS feed

  • 问题

  • 通过反射技术,能得到函数的返回类型,参数类型,但在显示的成类型对应字符串的时候,有个问题,如下例:

    Type type1 = typeof(int);
    Type type2=typeof(string);
    Type type3=typeof(DataTable);
    Type type4=typeof(MyA);
    
    上面Type.Name属性分别是:
     Int32
     String
     DataTable
     MyA

    但是我想得到下面的对应形式:
     int
     string
     DataTable
     MyA
    不能单纯的把字符串都转换成小写,如果反射的自定义类型,如:MyA,则要转换成相应的类型字符串:MyA,而不是mya
    不知道有没有简单的方法可以转换成相对应的类型?

    2010年11月15日 8:48

答案

  • 您好。

    int,string 等,只是一种被称为别名 (alias) 的语法糖,仅仅适合在 C# 使用;而 .NET 是一个多语言平台,比如,Visual Basic 中的 int 就叫 Integer。Reflection 技术是 .NET 的一部分而不是 C# 的一部分,所以,它提供的类型名称,是 .NET 的完全限定名称,而并非针对于语言的别名。


    Mark Zhou
    • 已标记为答案 Dic4000 2010年11月15日 16:32
    2010年11月15日 13:50

全部回复

  • int  实际上就是  Int32的简单写法

    string同理

    在检测类型时,会返回其真正的类型

    可以通过 Activator 类来反射创建对象

    当然也可以通过AppDomain里枚举所有Assembly里的Type来确定是否当前类型

    2010年11月15日 11:42
  • int  实际上就是  Int32的简单写法

    string同理

    我 就是想把真正类型转成简单类型的写法,我现在有个方法是把像int和Int32,string和String等这种映射关系用hashtable存起来,但这样就要把C#里面的基本类型的全都映射写进这个 hashtable中去,如:long 与int64等等,我想知道有没有别的简单方法可以达到这种转换的效果?
    2010年11月15日 12:28
  • 您好。

    int,string 等,只是一种被称为别名 (alias) 的语法糖,仅仅适合在 C# 使用;而 .NET 是一个多语言平台,比如,Visual Basic 中的 int 就叫 Integer。Reflection 技术是 .NET 的一部分而不是 C# 的一部分,所以,它提供的类型名称,是 .NET 的完全限定名称,而并非针对于语言的别名。


    Mark Zhou
    • 已标记为答案 Dic4000 2010年11月15日 16:32
    2010年11月15日 13:50