class  test  
{  
     public  string  datatype;  
     public  object  datavalue;  
}  
 
datatype:  只能等于各种类型的字符串如"System.Int32","System.String"等。  
datavalue: 装着相应的值如果datatype  =  "System.Int32"的话,datavalue  =  256等,datatype  =  "System.String"的话,datavalue  的值就为字符串。我的问题是怎样自动的将datavalue的值转换成datatype相对应的数据?

解决方案 »

  1.   

    System.Type.GetType("System.String")
      

  2.   

    我知道可以这样转换
    object obj = "testtfdsa";
    string str = (System.String)obj;但像下面转换系统就报错
    object obj = "testtfdsa";
    string str = Type.GetType("System.String")obj;
      

  3.   

    object o = null;
         Type t= Type.GetType("System.String");
        //Type t= Type.GetType("System.Int32");      if(t.ToString().Equals("System.String"))
           {   o = "aaa";
              Console.WriteLine(o);
           }else
            if(t.ToString().Equals("System.Int32"))
           {   o = 32;
              Console.WriteLine(o);
           }
      

  4.   

    那我为什么要用Type t= Type.GetType("System.String");直接用datatype不就行了。
      

  5.   

    我就是不想这样写switch( datatype )
    {
      case "System.String":
         ...
         break;
      case "System.Int32":
         ...
         break;
      case "System.Decimal":
         ...
         break;
    }因为这样写ms要是新加一个类型,我就又要改程序了。请问,有没有别的好办法
      

  6.   

    我就是不想这样写switch( datatype )
    {
      case "System.String":
         ...
         break;
      case "System.Int32":
         ...
         break;
      case "System.Decimal":
         ...
         break;
    }因为这样写ms要是新加一个类型,我就又要改程序了。请问,有没有别的好办法
    其实我觉得这样写是最好的,你加个"//TODO:微软加类型我要修改啊"在后面。
    微软加1个你也加一个,有TODO这个“关键字”在怕什么,反正在任务里它就摆着,微软加一次,你也就双击一下而已就找到了。改程序不怕改代码,怕的是改漏,不知道改哪里和找不到。
      

  7.   

    test t = ...
    Type type = Type.GetType(t.datatype,false,true);
    // 或者 Type.GetType("system." + t.datatype,false,true);
    return Convert.ChangeType(t.datavalue,type);这种程序只能支持实现了IConvertible的类型
    不可能支持所有类型的