求一函数,根据输入 的参数的类型来 返回同类型的范型List,至于其中的内容 暂时不考虑如调用此方法int a = 0;
GetList(a);
时返回的是 List<int>类型string b = "";
GetList(b);
时返回的是List<string>类型
不知道可否实现。

解决方案 »

  1.   

    呵呵。那你准备如何声明GetList这个函数呢?
      

  2.   

    List<T> GetList<T>(T a)
    {
    //自己实现...
    }
    调用...
    int a = 0; 
    List<int> list = GetList<int>(a);string b = "";
    List<string> list = GetList<string>(b);
      

  3.   

    List<T> GetList<T>(T a){
    Type t=a.GetType();
    List<t> temp=new List<t>();
    temp.Add(a);
    return temp;
    }
      

  4.   

     private Type getListType(object a)
            {
                return typeof(List<>).MakeGenericType(a.GetType());
            }
      

  5.   

    问题中 只是 拿 int 和 string 举个例子而已  我想要实现的不光是 系统类型,而且也支持我的自定义的类性
    如MyClass m = new MyClass();调用函数
    GetList(m);
    返回的是 List<MyClass>的类型遇到的难题是 如果通过 传入的一个事例或者类型  来构造 与此相同的类型使用了  type.Assembly.CreateInstance(type.ToString());  只能返回 object类型而在函数里 还不知道如何 显式转换的.
      

  6.   

     MyClass m = new MyClass(); 
     Type t = typeof(List<>).MakeGenericType(m.GetType());  object target = Activator.CreateInstance(t);  //创建该类型的list  System.Collections.IList targetList = target as System.Collections.IList;  //转成List执行:
      targetList.Add(m);
      

  7.   


            static void Main(string[] args)
            {
                TestClass tc = new TestClass() { ID = 1 };
                List<TestClass> list1 = GetList<TestClass>(tc);
                TestClass2 tc2 = new TestClass2() { Name = "Hello" };
                List<TestClass2> list2 = GetList<TestClass2>(tc2);
                Console.WriteLine(list1[0].ID);
                Console.WriteLine(list2[0].Name);
            }        class TestClass
            {
                public int ID { get; set; }
            }
            class TestClass2
            {
                public string Name { get; set; }
            }        static List<T> GetList<T>(T obj)
            {
                List<T> list = new List<T>();
                list.Add(obj);
                return list;
            }
      

  8.   


    感觉我要的效果就是结合两者就可以得到.在调用方 可以通过强类型的方式  list1[0].ID 来得到 返回的列表中的元素,而调用的时候不出现此强烈型的名称,而是通过 传入参数的实例来确定.
      

  9.   

    简单的说
    就是一个函数识别参数的类型,返回此类型的一个实例 就可以了 (至于返回的是一个实例或者是实例列表并不是关键)GetObject(object input)            TestClass tc = new TestClass() { ID = 1 };
      当调用          GetObject(tc) 时 返回的是个TestClass 类型
                TestClass2 tc2 = new TestClass2() { Name = "Hello" };
      当调用          GetObject(tc) 时 返回的是个TestClass2 类型
                List<TestClass2> list2 = GetList<TestClass2>(tc2);         class TestClass
            {
                public int ID { get; set; }
            }
            class TestClass2
            {
                public string Name { get; set; }
            }
      

  10.   

    难道楼主要这个: public Type GetList<T>()
            {
                List<T> list = new List<T>();
                return list.GetType();
            }
      

  11.   

    不是 Type  而是 此 type 的强类型的实例 
      

  12.   

    List<T> GetList<T>(T t)
    {
        return new List<T>();
    }int a=0;
    List<int> list = GetList(a)
      

  13.   

    妙..........此方法 ok....看来自己对反射和泛型了解的还不深啊
        class Program
        {
            public int a;        public Program()
            {
                a = 6;
                List<Program> list = GetList(this);
                Console.WriteLine(list[0].a.ToString());
            }        static void Main(string[] args)
            {
                Program d = new Program();
            }
            List <T> GetList <T>(T t) 
            {
                List<T> d = new List<T>();
                d.Add(t);
                return d; 
            }     }