下面代码想实现这样的功能,根据运行时参数obj的实际类型,执行对应的方法。
现在的问题是,类型是得到了,函数了执行了,通过单步调试,posInfoList每次都可以获取到正确的值,可当函数执行完后,posInfoList里却全是数据库里最后一行的记录的值,行数正确,但每行的值都是最后一行的值,不知道为什么?
请赐教!谢谢!
public List<SyncBase> GetTablePosInfoList(DB2Helper db2Helper, string selectText,object obj)
{
List<SyncBase> posInfoList = new List<SyncBase>();
try
{
System.Type t = obj.GetType();
MethodInfo mtInfo = t.GetMethod("Initialize");
DirectAccessDB2Delegate handler = delegate(DB2DataReader reader)
{
object[] objPara = { reader };
while (reader.Read())
{
mtInfo.Invoke(obj, objPara);
posInfoList.Add((SyncBase)obj);
}
};
db2Helper.ExecuteSqlReader(selectText, handler);
}
catch (Exception ex)
{
TraceHelper.WriteLine(ex);
}
return posInfoList;
}
闭包是类似的情况,不过你这个好像不会,得调试看看
你看看不用匿名方法看看会不会这样
public class Common<T>where T:class
{
public static List<T> getList(SqlDataReader dr)
{
List<T> list = new List<T>();
while(dr.Read())
{
T mode = typeof(T).Assembly.CreateInstance(typeof(T).FullName) as T;
foreach(PropertyInfo pi in typeof(T).GetProperties())
{
pi.SetValue(mode,dr[pi.Name],null);
}
list.Add(mode);
}
return list;
}
}
给你看下这段代码,不知道对你有帮助没