【发布时间】:2016-11-16 14:56:00
【问题描述】:
我目前正在尝试添加对象(学生)。我在 foreach 循环中创建一个由学生组成的对象列表,每个列表对象最终都引用相同的位置,因此每个列表对象上的信息与循环结束时创建的最后一个学生对象相同。我能够找到的唯一信息是使用 foreach 循环状态将对象添加到列表中,以创建对象的新实例,我认为我正在使用 Student stud = new Student 行。
我也尝试过使用默认构造函数并使用属性而不是参数,然后将学生添加到列表中,但是我收到了相同的结果。
非常感谢使用 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)
每个对象引用并为每个新对象重写的“this”信息
结果
【问题讨论】:
-
结果有什么问题?我的屏幕太小了,我无法制作图片的正面或反面。
-
这段代码看起来是正确的。您如何确定问题出在此处而不是其他地方?
-
另外,在第一个屏幕截图中,当您在构造函数的 第一行 上暂停时,如何填充
this的值?这似乎很奇怪。 -
您是否检查过这些行不都包含相同的信息?确定列表中的对象是否真的都相同或只是具有相同值的一种方法是右键单击并选择“生成对象 ID”。如果它们都是同一个对象,它们应该都得到相同的 id
-
Max,请包含用于填充
dt对象的语句或查询(例如Linq 或SQL)。如果所有对象都包含相同的数据,那么行也可能包含相同的数据。