C# 类型转换

zayababy1 2015-05-29 04:52:04
将List[System.Object] 转换为List[Models.BIZ_Order]
前提条件:1.BIZ_Order是类名,但是是动态的;
2.List[System.Object]中的object 是由Models.BIZ_Order生成的;
有兴趣的看看代码:

public static T pkFun<T>(T t) where T : new()
{
var vc = Initialization.nSMod.ClassModels.Find(s => s.Name == t.GetType().Name);
var vb = vc.MemmberModels.Find(s => (s.ForeignKeyModels != null && s.ForeignKeyModels.Count > 0));
var pkName = GetPKName(t);
var pkValue = t.GetType().GetProperty(pkName).GetValue(t, null);//获取主键的值;
foreach (var vf in vb.ForeignKeyModels)
{
var v = Initialization.nSMod.ClassModels.Find(s => s.ID == vf.ClassID);
var parameter = new SqlParameter(string.Format("@{0}", vf.MemmberName), pkValue);
var sql = new StringBuilder();
sql.AppendFormat("select * from {0} where {1} = @{1}", v.Name, vf.MemmberName);
var dt = IDataSourceTypeFactory.Create().ExecuteTable(CommandType.Text, sql.ToString(), parameter);

Type classT = Type.GetType("Models." + v.Name);//获取同名类---classT;
var obj = Activator.CreateInstance(classT);

dynamic teacher = classT.IsInstanceOfType(obj) ? obj : null;
List<dynamic> objs = new List<dynamic>();

foreach (DataRow dr in dt.Rows)
{
foreach (DataColumn c in dt.Columns)
{
var prop = obj.GetType().GetProperty(c.ColumnName);
var value = dr[c.ColumnName];
if (value.ToString() == "") value = null;
prop.SetValue(obj, value, null);
}
objs.Add(teacher);
}
foreach (var vx in t.GetType().GetProperties())
{
if (vx.Name == "List_" + vf.MemmberName + "_" + v.Name)
{
t.GetType().GetProperty(vx.Name).SetValue(t, objs, null);
break;
}
}
}

return t;
}
objs中存储的怎么才能是"Models." + v.Name呢?
...全文
345 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Poopaye 2015-05-29
  • 打赏
  • 举报
回复
IList list = (IList)Activator.CreateInstance(typeof(List<>).MakeGenericType(classT));
list.Add(teacher)

111,125

社区成员

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

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

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