我有Date_Check类型的List,我执行sql查询并检索数据集中的值 并且我通过遍历数据集来填充List,问题是当第二次迭代朝向列表[0],列表[1],列表[2] ...值时被当前对象值替换
这是我的代码:
string query = "select Record_Id, Movie_Name from tbl_theater_master ";
DataSet dtst_Theatrs = new DataSet();
dtst_Theatrs = ObjCommon.GetObject.ExecuteQuery_Select(Connection.ConnectionString, query);
if (dtst_Theatrs.Tables[0].Rows.Count != 0)
{
List<Date_Check> lst_Date_Check = new List<Date_Check>();
Date_Check obj_Date_Check = new Date_Check();
for (int i = 0; dtst_Theatrs.Tables[0].Rows.Count > i; i++)
{
obj_Date_Check.Movie_Name = dtst_Theatrs.Tables[0].Rows[i]["Movie_Name"].ToString();
obj_Date_Check.Record_Id = dtst_Theatrs.Tables[0].Rows[i]["Record_Id"].ToString();
lst_Date_Check.Add(obj_Date_Check);
}
}
这是我的Date_Check对象:
public class Date_Check
{
public string Record_Id { get; set; }
public string Movie_Name { get; set; }
}
当数据集迭代完成时,lst_Date_Check将所有索引更改为Last迭代值,我的代码出了什么问题
答案 0 :(得分:1)
继续在for循环中创建类Date_Check obj_Date_Check = new Date_Check();
的对象。这就是你在每次迭代中创建新对象的方式。
for (int i = 0; dtst_Theatrs.Tables[0].Rows.Count > i; i++)
{
Date_Check obj_Date_Check = new Date_Check();
obj_Date_Check.Movie_Name = dtst_Theatrs.Tables[0].Rows[i]["Movie_Name"].ToString();
obj_Date_Check.Record_Id = dtst_Theatrs.Tables[0].Rows[i]["Record_Id"].ToString();
lst_Date_Check.Add(obj_Date_Check);
}
答案 1 :(得分:0)
这是因为您的Date_Check
对象是引用类型而不是值类型。这意味着行Date_Check obj_Date_Check = new Date_Check();
在内存中创建一次变量,然后在每次更新该对象时更新同一个对象。您有两个选择:
在for
循环中实例化对象,在内存中创建一个对象,即:
for (int i = 0; dtst_Theatrs.Tables[0].Rows.Count > i; i++)
{
Date_Check obj_Date_Check = new Date_Check();
obj_Date_Check.Movie_Name = dtst_Theatrs.Tables[0].Rows[i]["Movie_Name"].ToString();
obj_Date_Check.Record_Id = dtst_Theatrs.Tables[0].Rows[i]["Record_Id"].ToString();
lst_Date_Check.Add(obj_Date_Check);
}
或者使用Date_Check
将Value Type
对象创建为Struct
,即:
public struct Date_Check
{
public string Record_Id { get; set; }
public string Movie_Name { get; set; }
}