asp.net 如何取出List<T>中每一项的值
如题,我有一个泛型集合List<T>list=newList<T>();我在实例化的时候T是不确定的,此时我将list传递到b页面,在b页面如何取出list集合中的每一项...
如题, 我有一个泛型集合 List<T> list=new List<T>(); 我在实例化的时候T是不确定的, 此时我将list传递到b页面,在b页面如何取出list集合中的每一项,每一个字段的值 注:在b页面中也不能确定T是什么
对了, T是一个实体对象, 只是不确定具体是哪一个实体 展开
对了, T是一个实体对象, 只是不确定具体是哪一个实体 展开
3个回答
展开全部
你在实例化的时候如何做到T是的类型是不确定的?。。。
泛型类是这么用的
public class MyList<T> : List<T>
{
//这里重写一个将T中的属性全显示出来的方法
public override string ToString()
{
string result = string.Empty;
foreach (T obj in this)
{
result += "[";
PropertyInfo[] ps = obj.GetType().GetProperties();
//循环获取该对象的所有属性和值
foreach (PropertyInfo info in ps)
{
result += "属性:" + info.Name + " ";
result += "值:" + info.GetValue(obj,null)+" ";
}
result += "],";
}
return result.TrimEnd(',');
}
}
然后自定义一个对象Student
public class Student
{
private string _name = string.Empty;
public string Name
{
set { _name = value; }
get { return _name; }
}
private int _age = 0;
public int Age
{
set { _age = value; }
get { return _age; }
}
}
使用时:
Student s1 = new Student();
s1.Name = "stu1";
s1.Age = 90;
Student s2 = new Student();
s2.Name = "stu2";
s2.Age = 70;
MyList<Student> list = new MyList<Student>();
//如果你需要跨页面传递,这里可以选择把list存到Session里
list.Add(s1);
list.Add(s2);
//跨页面的话,要把Session转换回来,这里模拟一下就用上边已经定义的list了
IList<Student> newList=list;
//newList.ToString()显示所有对象的属性和值,已经在泛型集合里定义好的
Console.WriteLine(newList.ToString());
Console.Read();
泛型类是这么用的
public class MyList<T> : List<T>
{
//这里重写一个将T中的属性全显示出来的方法
public override string ToString()
{
string result = string.Empty;
foreach (T obj in this)
{
result += "[";
PropertyInfo[] ps = obj.GetType().GetProperties();
//循环获取该对象的所有属性和值
foreach (PropertyInfo info in ps)
{
result += "属性:" + info.Name + " ";
result += "值:" + info.GetValue(obj,null)+" ";
}
result += "],";
}
return result.TrimEnd(',');
}
}
然后自定义一个对象Student
public class Student
{
private string _name = string.Empty;
public string Name
{
set { _name = value; }
get { return _name; }
}
private int _age = 0;
public int Age
{
set { _age = value; }
get { return _age; }
}
}
使用时:
Student s1 = new Student();
s1.Name = "stu1";
s1.Age = 90;
Student s2 = new Student();
s2.Name = "stu2";
s2.Age = 70;
MyList<Student> list = new MyList<Student>();
//如果你需要跨页面传递,这里可以选择把list存到Session里
list.Add(s1);
list.Add(s2);
//跨页面的话,要把Session转换回来,这里模拟一下就用上边已经定义的list了
IList<Student> newList=list;
//newList.ToString()显示所有对象的属性和值,已经在泛型集合里定义好的
Console.WriteLine(newList.ToString());
Console.Read();
更多追问追答
追问
就是通过方法传递, 比如b页面中有一个方法
void GetList( List list )
{
//在这个方法中, 我想遍历list集合, 然后取出集合中每一项的字段的值
//T:T是一个Class类的实体,比如Student类, 成员有Name,Age
//然后我想在遍历的时候,分别取出Name和Age的值, 当然,Student只是举例, 我还可以传递其他的实体对象,然后分别取出实体对象中的值
}
追答
第一,你不能够跨页面将list传递过去,B页面公开了方法也不行。你只能用Session,Cookie等对象进行传递。如果你的B页面仅仅是做了一个方法然后有返回值,那B页面可以改成B类来实现。
第二,在我写的例子中,MyList就是一个自定义的泛型集合类。所谓泛型,就是对于T不管是任何类型的情况下,都可以使用MyList这个集合类来实现需要的功能,而不是说List这个T是可以随意使用的,你在实例化的时候必须确定类型,比如MyList,而你在另外个页面,这个对象也只能还原成MyList,然后调用自定义的ToString方法显示所有对象的属性和值。
展开全部
我有点疑问啊,页面之间能传集合吗?页面间传值方式无非那么几种,session,application, QueryString。。。
除非你是页面A 的class A 调用 页面B 的 方法 public voidTest<T>()(List<T> list)
{
}
如果是这样,这个泛型泛型T必须进行泛型约束 , 比如这里有个 class C
public voidTest<T>()(List<T> list) where T: C
{
//在这里边你可以使用 C类型对象的属性和方法
}
除非你是页面A 的class A 调用 页面B 的 方法 public voidTest<T>()(List<T> list)
{
}
如果是这样,这个泛型泛型T必须进行泛型约束 , 比如这里有个 class C
public voidTest<T>()(List<T> list) where T: C
{
//在这里边你可以使用 C类型对象的属性和方法
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你怎么传递到b页面?
是说传递到b的一个方法里吗?
b页面方法大致代码如下:
void abc<T>(List<T> list){
foreach(T item in list){
// 对当前这一项做处理吧
}
}
是说传递到b的一个方法里吗?
b页面方法大致代码如下:
void abc<T>(List<T> list){
foreach(T item in list){
// 对当前这一项做处理吧
}
}
更多追问追答
追问
嗯 ,是的, 比如我用一个方法将list传递到另外一个页面,我想要在那一个页面中对list进行遍历并取值, 只是不知道list属于哪个实体的集合, 所以不知道该怎么取值了
追答
你必须知道这个实体有什么样的功能,如果不知道,只能简单的去调用ToString()方法了
通常都要求这个T实现了一个接口,然后就可以对这个接口的方法进行调用了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询