class data add将重写已存在的数据

时间:2015-11-05 13:47:39

标签: c# sql class dataset sqldatareader

我有一个类,并且在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);
    }
}

1 个答案:

答案 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);
    }
}