我有一个类,并且在2个foreach循环中我想将我的数据集中的表中的所有数据添加到我的类中,但问题是:在完成内部foreach循环之后,将要复制的下一个表还将替换已经在ret
中的记录,如果我有2个table1的1行表和2个表2的行,我将在ret
中有3个记录,但表1中的所有数据都是替换为table2中的数据!
示例
表1表2 -------- -------- v y v y - - - - te st mm dd ss cc
但最终在ret而不是{te st} {mm dd} {ss cc}我有{mm dd} {mm dd} {ss cc}我有 帮助!
list<class> ret = new list<class>();
class FR = new class();
foreach (DataTable table in ds.Tables)
{
foreach (DataRow row in table.Rows)
{
if (String.IsNullOrEmpty(FR.v) || FR.v != row["v"])
{
FR.v = row["v"].ToString();
}
if (String.IsNullOrEmpty(FR.y) || FR.y != row["y"])
{
FR.y = row["y"].ToString();
}
ret.Add(FR);
}
}
答案 0 :(得分:1)
FR
始终是同一个实例,因此每次在其上设置值时,您都会在同一个实例上进行操作,并一遍又一遍地将其重新添加到集合中。
只需在循环的每次迭代中创建一个新实例:
List<SomeClass> ret = new List<SomeClass>();
foreach (DataTable table in ds.Tables)
{
foreach (DataRow row in table.Rows)
{
SomeClass FR = new SomeClass(); // <--- right here
if (String.IsNullOrEmpty(FR.v) || FR.v != row["v"])
{
FR.v = row["v"].ToString();
}
if (String.IsNullOrEmpty(FR.y) || FR.y != row["y"])
{
FR.y = row["y"].ToString();
}
ret.Add(FR);
}
}