object 转为 List的问题

tianweima 2011-03-29 04:30:22
数据结构
class ClassF
{
string a1=;
List<ClassC1> listc1;
List<ClassC2> listc2;
List<ClassC2> listc3;
}
class ClassC1{}
class ClassC2{}
class ClassC3{}


我通过遍历属性得到ClassF实例的各属性类型和值(object类型),当遇到List的时候需要再对子类List进行遍历,但子类是根据属性动态得到类型的,请问如何定义和遍历子类List.代码如下:
//BaseModel为各Model的父类
private static void ModelToQuery(WebClientEx webClient, BaseModel model)
{
//获取实体属性集合
PropertyInfo[] pis = model.GetType().GetProperties();
for (int i = 0; i < pis.Length; i++)
{
//获取属性的值
object objValue = pis[i].GetValue(model, null);
//是否为子实体列表
if (pis[i].PropertyType.IsGenericType)//是否是泛型类型
{
List<BaseModel> list1 = (List<BaseModel>)objValue;//这句是错误的
foreach (BaseModel childModel in objValue)
{
ModelToQuery(webClient, (BaseModel)childModel);
}
}
else
webClient.QueryString.Add(pis[i].Name, objValue.ToString());
}
}
...全文
233 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
advisd 2011-03-29
  • 打赏
  • 举报
回复
我记得有这个转换的方法,可以动态转换Convert.ChangeType((object Value,Type conversionType)以前经常会用到的,特别是用反射的时候。希望对LZ有帮助!!
机器人 2011-03-29
  • 打赏
  • 举报
回复
可以改为:
object objValue = pis[i].GetValue(model, null);
...
var list1 = (IEnumable<BaseModel>)objValue;
机器人 2011-03-29
  • 打赏
  • 举报
回复
站个位,这不是协变么?我试试。。。
tianweima 2011-03-29
  • 打赏
  • 举报
回复
ojlovecd
调试过了,就是要这个效果,还是基础没学好:)
我姓区不姓区 2011-03-29
  • 打赏
  • 举报
回复
foreach (object childModel in (IEnumerable)objValue)
{
ModelToQuery(webClient, (BaseModel)childModel);
}

不知道我有没有理解错
版主 2011-03-29
  • 打赏
  • 举报
回复
貌似,没了
tianweima 2011-03-29
  • 打赏
  • 举报
回复
没其它办法了吗?
vrhero 2011-03-29
  • 打赏
  • 举报
回复
集合不允许强制转换类型...只能枚举项一一转换...

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧