c#反射List<T>获取T
publicclassClass1{publicClass1(){}publicstringname{get{return_name;}set{_name=value;}...
public class Class1
{
public Class1()
{
}
public string name
{
get { return _name; }
set { _name = value; }
}
private string _name = "";
public int age
{
get { return _age; }
set { _age = value; }
}
private int _age = 0;
}
public class Class1s:List<Class1>
{
public void Add(Class1 class)
{
this.Add(class);
}
}
Type t = Class1.GetType();
PropertyInfo[] info = t.GetProperties();
可以获取Class1内属性(name(string),age(int32))
想要知道如何反射Class1s拿到Class1内的属性(name(string),age(int32)) 展开
{
public Class1()
{
}
public string name
{
get { return _name; }
set { _name = value; }
}
private string _name = "";
public int age
{
get { return _age; }
set { _age = value; }
}
private int _age = 0;
}
public class Class1s:List<Class1>
{
public void Add(Class1 class)
{
this.Add(class);
}
}
Type t = Class1.GetType();
PropertyInfo[] info = t.GetProperties();
可以获取Class1内属性(name(string),age(int32))
想要知道如何反射Class1s拿到Class1内的属性(name(string),age(int32)) 展开
展开全部
Class1s xx = new Class1s();
var inters = xx.GetType().GetInterfaces();//获取所有继承的泛型类型
if (inters.Length > 0)
{
var ts = inters[0].GetGenericArguments();//获取第一个泛型的形参类型数组
if (ts.Length > 0)
{
var res = ts[0];//获取到Class1
//todo:后续代码
}
}
已知类型Class1,获取它的属性集合,你上面的代码已经有了。
有点要注意,在获取第一个泛型的形参类型那里,不用的类型继承的泛型接口也不同,例如,可能是IList、IList<T>、Dictionary<T,K>的,所以不一定是第一个泛型就可以获取出T。这里应该还是有根据实际情况做相应处理的过程。
另外,如果已知是List的话,有一个很简单的方法:
xx.GetType().GetMethod("Find").ReturnType。就可以返回Class1的Type了,这种就很有针对性,专门针对List<T>的T Find()函数设计。获得Find函数的返回类型即可。
希望能给你启示。
var inters = xx.GetType().GetInterfaces();//获取所有继承的泛型类型
if (inters.Length > 0)
{
var ts = inters[0].GetGenericArguments();//获取第一个泛型的形参类型数组
if (ts.Length > 0)
{
var res = ts[0];//获取到Class1
//todo:后续代码
}
}
已知类型Class1,获取它的属性集合,你上面的代码已经有了。
有点要注意,在获取第一个泛型的形参类型那里,不用的类型继承的泛型接口也不同,例如,可能是IList、IList<T>、Dictionary<T,K>的,所以不一定是第一个泛型就可以获取出T。这里应该还是有根据实际情况做相应处理的过程。
另外,如果已知是List的话,有一个很简单的方法:
xx.GetType().GetMethod("Find").ReturnType。就可以返回Class1的Type了,这种就很有针对性,专门针对List<T>的T Find()函数设计。获得Find函数的返回类型即可。
希望能给你启示。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用 for 循环获取,或者 var t = List<T>.ElementAt(index).GetType();
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
问下,Class1s类,你能改动吗?还是说Class1s类不能改?
追问
class1s 你可以认为什么都没有 比如这样
public class Class1s:List
{
}
我的意思很简单 就是想拿到继承类的泛型中的类的属性
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询