首页 新闻 会员 周边 捐助

动态调用对象方法

0
悬赏园豆:5 [已关闭问题]

下面代码想实现这样的功能,根据运行时参数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;
        }

stewen的主页 stewen | 初学一级 | 园豆:14
提问于:2010-05-01 19:41
< >
分享
其他回答(1)
0

闭包是类似的情况,不过你这个好像不会,得调试看看

你看看不用匿名方法看看会不会这样

LittlePeng | 园豆:3445 (老鸟四级) | 2010-05-03 09:29
0
代码
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;
}
}

 

给你看下这段代码,不知道对你有帮助没

zfy | 园豆:169 (初学一级) | 2010-05-10 09:39
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册