关于ilist.add的问题

inter913 2008-03-21 10:43:13
StringBuilder strSql = new StringBuilder();
strSql.Append("select * from [Imgdb_topic]");

M_Imgdb_topic Str_Info = new M_Imgdb_topic();
IList<M_Imgdb_topic> ILM = new List<M_Imgdb_topic>();

using (SqlDataReader dr = SqlHelper.ExecuteReader(SqlHelper.ConnectionSqlServer, CommandType.Text, strSql.ToString()))
{
while (dr.Read())
{
Str_Info.id = (int)dr["id"];
Str_Info.title = dr["title"].ToString();

ILM.Add(Str_Info);
}
}

return ILM;

上面这段代表,ILM.Add每次都将ILM里原有的项全部更新了。比如数据库里有数据1,2,3,整个操作过后,ILM里的三个项全是3,之前的1和2被更新。为什么?请各位指点一二。
...全文
237 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xray2005 2008-03-21
  • 打赏
  • 举报
回复
M_Imgdb_topic Str_Info = new M_Imgdb_topic(); //类是引用类型
所以,不论你执行多少次while里的赋值,Str_Info.id ,Str_Info.title 一直都被更新指向最后一次改变他们的地址引用.


如果你把M_Imgdb_topic定义为结构struct类型,那么你的代码结果能就和你现在想的一样了

所以,修改代码:


StringBuilder strSql = new StringBuilder();
strSql.Append("select * from [Imgdb_topic]");


IList <M_Imgdb_topic> ILM = new List <M_Imgdb_topic>();

using (SqlDataReader dr = SqlHelper.ExecuteReader(SqlHelper.ConnectionSqlServer, CommandType.Text, strSql.ToString()))
{
while (dr.Read())
{
M_Imgdb_topic Str_Info = new M_Imgdb_topic();
Str_Info.id = (int)dr["id"];
Str_Info.title = dr["title"].ToString();

ILM.Add(Str_Info);
}
}

return ILM;

inter913 2008-03-21
  • 打赏
  • 举报
回复
StringBuilder strSql = new StringBuilder();
strSql.Append("select * from [Imgdb_topic]");

IList <M_Imgdb_topic> ILM = new List <M_Imgdb_topic>();

using (SqlDataReader dr = SqlHelper.ExecuteReader(SqlHelper.ConnectionSqlServer, CommandType.Text, strSql.ToString()))
{
while (dr.Read())
{
M_Imgdb_topic Str_Info = new M_Imgdb_topic();
Str_Info.id = (int)dr["id"];
Str_Info.title = dr["title"].ToString();

ILM.Add(Str_Info);
}
}

return ILM;

问题找到了,上面的代码就运行正常,看看有什么区别。
inter913 2008-03-21
  • 打赏
  • 举报
回复
方法不对?请指点!

我已经找到问题了,但还是想听听你的看法。
lihongdian 2008-03-21
  • 打赏
  • 举报
回复
因为你的添加方法不对.

62,072

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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