使用foreach循环添加到列表中

时间:2016-11-16 14:56:01

标签: c# loops foreach

我目前正在尝试添加对象(学生)。我在foreach循环中创建一个由学生组成的对象列表,每个列表对象最终引用同一位置,因此每个列表对象的信息与循环结束时创建的最后一个学生对象相同。我能够找到的唯一信息是使用foreach循环将对象添加到列表中,以创建对象的新实例,我认为我正在使用Student stud = new Student line。

我也尝试使用默认构造函数并使用属性而不是参数,然后将学生添加到列表中,但是我收到相同的结果。

使用foreach循环向对象列表添加对象的任何帮助都将非常感激。

foreach循环:

foreach (DataRow datrow in dt.Rows)
{
    Student stud = new Student(
        datrow["ID"].ToString(),
        datrow["fName"].ToString(),
        datrow["lName"].ToString(),
        datrow["GPA"].ToString(),
        datrow["Graduate"].ToString()
    );
    studentList.Add(stud);
}

我的学生建设者:

public Student(
    string studentID,
    string fName,
    string lName,
    string studentGPA,
    string graduate)
{
    iD = studentID;
    firstName = fName;
    lastName = lName;
    gPA = studentGPA;
    grad = graduate;
}

语句用于填写dt

                OleDbCommand cmd = new OleDbCommand(strSql, con);
                con.Open();
                cmd.CommandType = CommandType.Text;
                OleDbDataAdapter dc = new OleDbDataAdapter(cmd);
                dc.Fill(ds, "ID");
                dt = ds.Tables["ID"];
                const char DELIM = ',';
                foreach (DataRow datrow in dt.Rows)

"这"每个对象引用并为每个新对象重写的信息

结果

2 个答案:

答案 0 :(得分:2)

您好我的建议是尝试在此外面声明类变量,看看它是否有效

Student stud;

    foreach (DataRow datrow in dt.Rows)
    {
            stud = new Student(
            datrow["ID"].ToString(),
            datrow["fName"].ToString(),
            datrow["lName"].ToString(),
            datrow["GPA"].ToString(),
            datrow["Graduate"].ToString()
        );
        studentList.Add(stud);
    }

请告诉我你的建议。

感谢 KARTHIK

答案 1 :(得分:2)

您的私有变量很可能是静态的。这可以解释为什么变量在构造函数中已经有一个值(对于正常的实例变量,它们不会这样)。您的属性将返回静态值(这也解释了它们如何具有值)。将变量更改为实例(不是static