private Type getListType(object a) { return typeof(List<>).MakeGenericType(a.GetType()); }
问题中 只是 拿 int 和 string 举个例子而已 我想要实现的不光是 系统类型,而且也支持我的自定义的类性 如MyClass m = new MyClass();调用函数 GetList(m); 返回的是 List<MyClass>的类型遇到的难题是 如果通过 传入的一个事例或者类型 来构造 与此相同的类型使用了 type.Assembly.CreateInstance(type.ToString()); 只能返回 object类型而在函数里 还不知道如何 显式转换的.
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);
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; }
简单的说 就是一个函数识别参数的类型,返回此类型的一个实例 就可以了 (至于返回的是一个实例或者是实例列表并不是关键)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; } }
难道楼主要这个: public Type GetList<T>() { List<T> list = new List<T>(); return list.GetType(); }
不是 Type 而是 此 type 的强类型的实例
List<T> GetList<T>(T t) { return new List<T>(); }int a=0; List<int> list = GetList(a)
妙..........此方法 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; } }
{
//自己实现...
}
调用...
int a = 0;
List<int> list = GetList<int>(a);string b = "";
List<string> list = GetList<string>(b);
Type t=a.GetType();
List<t> temp=new List<t>();
temp.Add(a);
return temp;
}
{
return typeof(List<>).MakeGenericType(a.GetType());
}
如MyClass m = new MyClass();调用函数
GetList(m);
返回的是 List<MyClass>的类型遇到的难题是 如果通过 传入的一个事例或者类型 来构造 与此相同的类型使用了 type.Assembly.CreateInstance(type.ToString()); 只能返回 object类型而在函数里 还不知道如何 显式转换的.
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);
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;
}
感觉我要的效果就是结合两者就可以得到.在调用方 可以通过强类型的方式 list1[0].ID 来得到 返回的列表中的元素,而调用的时候不出现此强烈型的名称,而是通过 传入参数的实例来确定.
就是一个函数识别参数的类型,返回此类型的一个实例 就可以了 (至于返回的是一个实例或者是实例列表并不是关键)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; }
}
{
List<T> list = new List<T>();
return list.GetType();
}
{
return new List<T>();
}int a=0;
List<int> list = GetList(a)
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;
} }