2014-09-01 3 views
0

Date_Check 형식의 목록이 있는데 SQL 쿼리를 실행하고 데이터 집합 의 값을 검색하고 목록을 데이터 집합을 통해 반복하여 채 웁니다. 문제는 두 번째 반복이 리스트 [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에서 모든 인덱스가 마지막 반복 값으로 변경되었으므로 코드에 어떤 문제가 있습니까?

답변

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

아니면 Struct 즉 사용하여 Value Type 같은 Date_Check 객체를 생성 : 당신은 두 가지 옵션이 있습니다

public struct Date_Check 
{ 
    public string Record_Id { get; set; } 
    public string Movie_Name { get; set; } 
}