2012-07-11 4 views
2

본 웹 메서드가 있습니다. 나는 그것이 lstAllCultures의 마지막 값이 lstCulture을 볼 때 lstAllCultures에서 어떤 error.When I 디버그없이일반 목록 값을 다른 일반 목록으로 복사

[WebMethod] 
    public List<BlogCultureInfo> loadCultureList() 
    { 
     List<Language> lstAllCultures = LocaleController.GetCultures();//Its bring a value from cultureInfo 
     List<SCultureInfo> lstCulture = new List<SCultureInfo>(); 
     SCultureInfo objInfo = new SCultureInfo(); 
     foreach (Language objLst in lstAllCultures) 
     { 

      objInfo.LanguageName = objLst.LanguageName; 
      objInfo.LanguageCode = objLst.LanguageCode; 

      lstCulture.Add(objInfo); 
     } 
     return lstCulture; 

    } 

그것의 실행은 루프 후 value.But CultureInfo를 다른 올바른 value.210를 가져온다. enter image description here

내가 뭘 잘못하고 있는지. 고마워.

+0

SCultureInfo objInfo = 새로운 SCultureInfo() 내부의 foreach와 같은 새로운 objInfo마다 생성; // 그것을 루프 안으로 옮긴다. – 2kay

답변

4

루프 내부에 새 오브젝트 (SCultureInfo)를 작성해야합니다. 원래 코드에서

foreach (Language objLst in lstAllCultures) 
     { 
      SCultureInfo objInfo = new SCultureInfo(); 
      objInfo.LanguageName = objLst.LanguageName; 
      objInfo.LanguageCode = objLst.LanguageCode; 
      lstCulture.Add(objInfo); 
     } 

당신이 하나의 개체 만이 목록에 여러 번와 foreach 루프의 마지막 반복에 할당 된 값을 들고 덧붙였다.

0

변경 그것에 :

foreach (Language objLst in lstAllCultures) 
    { 
    SCultureInfo objInfo = new SCultureInfo(); 
    objInfo.LanguageName = objLst.LanguageName; 
    objInfo.LanguageCode = objLst.LanguageCode; 
    lstCulture.Add(objInfo); 
} 
0

당신이 foreach 루프 외부 objInfo을 인스턴스화하고, 당신은 단지 개체에 대한 개체의 참조 및 수정에를 추가 목록에서 개체를 추가하여 있기 때문에 그러면 foreach 루프가 목록의 모든 참조에 적용됩니다.

어떻게이 목적을 제공 작동합니까 이동 라인 foreach 루프

foreach (Language objLst in lstAllCultures) 

내부

SCultureInfo objInfo = new SCultureInfo(); 

어떻습니까?

0

모든 lstAllCultures에 대해 동일한 objInfo 인스턴스를 목록에 추가합니다. LanguageNameLanguageCode은 참조 유형입니다. 따라서 새 값을 objInfo에 지정할 때마다 인스턴스가 값으로 업데이트되고 여러 번 추가 될 때 동일한 값이 반복되는 것을 볼 수 있습니다.

이 문제를 해결하기 위해,

foreach (Language objLst in lstAllCultures) 
{ 
    SCultureInfo objInfo = new SCultureInfo(); 
    objInfo.LanguageName = objLst.LanguageName; 
    objInfo.LanguageCode = objLst.LanguageCode; 
    lstCulture.Add(objInfo); 
}