表达不清楚的话,句举个例子如下
string pp = "System.Int64";
string pp2 = "Test.show";//自己的命名空间下的类,
string pp3 = "System.String ";  Type MyType=// 怎么将pp ,pp2pp3,转为对应类,这里Type 只是表明一个情况,用Type ,
 List < MyType > dd = new List<MyType>();
 因为在使用List 时候里面的泛型要确定,现在只能获取该类型对应的字符串,怎么转为对应的类型。

解决方案 »

  1.   


                string pp = "System.Int64";
                string pp2 = "Test.show";//自己的命名空间下的类,
                string pp3 = "System.String";            Type type1 = Type.GetType(pp);
                Type type2 = Type.GetType(pp2);
                Type type3 = Type.GetType(pp3);            Console.WriteLine(type1.Name);
                Console.WriteLine(type2.Name);
                Console.WriteLine(type3.Name);
      

  2.   


                string pp = "System.Int64";
                Type t = Type.GetType("System.Collections.Generic.List`1[[" + pp + "]]");
                object obj = Activator.CreateInstance(t);
                IList list = obj as IList;
                list.Add(1L);
                list.Add(2L);
                foreach (var i in list)
                    Console.WriteLine(i);
      

  3.   

    你的需求肯定搞错了,肯定不是要什么反射。List < MyType > dd = new List<MyType>();事实上,MyTpye已经完成了又如何?下面的代码怎么写?dd又不知道你的类型是什么,什么提示都不可能有,什么也做不了,"System.Int64""Test.show""System.String "这些类型在里代码里都不能用。
      

  4.   

    真是高手....  
    Type t = Type.GetType("System.Collections.Generic.List`1[[" + pp + "]]");
                object obj = Activator.CreateInstance(t);
     就是我要的。
      

  5.   

    这样那和List dd = new List();不用泛型不是也差不多吗?难道是为了效率?
      

  6.   

    不过,obj还不能当做类型来直接用,  能这样的已经很感谢了。
      

  7.   

    IList<grp.gfmis.trui.showData> pp = dgvtable.DataSource as IList<grp.gfmis.trui.showData>;grp.gfmis.trui.showData 这里写的是死的,该去获取, 现在是能获取了,或的是 grp.gfmis.trui.showData 字符串 ,
    怎么把他 变成一个能用的类型,   var ddd =  去转 grp.gfmis.trui.showData  
        能让这样的   IList<ddd > pp
     我要的目的是 ,去转换grp.gfmis.trui.showData为一个类型ddd,ddd这个类型在 IList中能直接的用  
      

  8.   


    怎么反射 能给个例子吗? 我就是要这个类型啊 ,放在Ilist 类型中啊。
      

  9.   

    绕了一圈又绕回来了吧,这样是不行的,泛型不可能动态获取类型,通过反射动态获取的是实例你应该将你的类改成泛型类,所有用到grp.gfmis.trui.showData的地方原样用grp.gfmis.trui.showData来代替。
      

  10.   

    真的实现不了啊,那怎么办
    var t = dgvtable.DataSource.GetType();
     var myTpye = t.GetGenericArguments()[0];//获取类型Type SetType = Type.GetType("System.Collections.Generic.List`1[[" + myTpye + "]]");
         object obj = Activator.CreateInstance(SetType);
         IList list = obj as IList;
    IList<obj > pp = dgvtable.DataSource as IList<obj >;
      

  11.   

    不还意思 ,获取类型是 ; var myTpye = t.GetGenericArguments()[0].FullName ;//获取类型
      

  12.   

    你的需求是不是这样?业务逻辑层的开发人员已经给你的GridView一个数据源拿来绑定了,但你是UI层的开发人员,还想对给你的数据处理处理,目前你只知道这是一个泛型集合,所以想还原会原来的类型。但dgvtable的DataSource属性类型是object的,类型信息已经丢失了,你为什么不直接做你要做的事情,而一直纠结于还原原来的类型信息呢?
      

  13.   

    楼主的需求有点矛盾,既然类型是通过字符串动态获取的,怎么可能在List<xxx>写上 该类型?
    1 笨的办法,如果需求是明确的,可以用枚举
       switch (typeName)
    {
       case "System.String": 
         list<string> list = new list<string>();
        .....
    }2 为什么不用 List<T> list= new List()?
      

  14.   


    var t = dgvtable.DataSource.GetType();
    var myTpye = t.GetGenericArguments()[0];//获取类型
    IList<object> ls = new List<object>();Type SetType = Type.GetType("System.Collections.Generic.List[[" + myTpye + "]]");
    object obj = Activator.CreateInstance(SetType);
    foreach(赋值)
                    foreach (System.Reflection.PropertyInfo pi in  SetType.GetProperties())
                    {
                        pi.SetValue("属性名",值);
                                       }
     ls.add(pi);
      

  15.   

    想动态Ilist泛型,代码都还没执行,一切未知,编译肯定通不过,只能用object。