2

我有这个网络方法。

   [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;

    }

它的运行没有任何错误。当我调试lstAllCultures它时,它带来了正确的值。210 个不同的文化信息值。但是在循环之后,当我看到lstCulture它的最后一个值为lstAllCultures.在此处输入图像描述

我做错了什么。谢谢。

4

4 回答 4

4

您需要在循环内部而不是外部创建新对象(SCultureInfo)。

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

在您的原始代码中,您只有一个对象,多次添加到列表中并保存在 foreach 循环的最后一次迭代中分配的值。

于 2012-07-11T05:25:39.110 回答
0

将其更改为:

foreach (Language objLst in lstAllCultures)
  {
  SCultureInfo objInfo = new SCultureInfo();
  objInfo.LanguageName = objLst.LanguageName;
  objInfo.LanguageCode = objLst.LanguageCode;
  lstCulture.Add(objInfo);
}
于 2012-07-11T05:26:00.597 回答
0

因为您在 foreach 循环之外实例化了 objInfo,并且通过将对象添加到列表中,所以您只是添加了对象的 REFERENCE,并且在您的 foreach 循环中对对象的任何修改都将应用于列表中的所有引用。

怎么移动线

 SCultureInfo objInfo = new SCultureInfo();

在 foreach 循环内

  foreach (Language objLst in lstAllCultures)

它是否可以达到目的?

于 2012-07-11T05:27:20.763 回答
0

您正在将相同的objInfo实例添加到每个lstAllCultures. 看起来像LanguageName并且LanguageCode是引用类型。因此,每次您为其分配一个新值时,objInfo都会使用该值更新实例,并且当它被多次添加时,您会看到重复相同的值。

objInfo为了解决这个问题,每次在 foreach中创建一个新的,比如

foreach (Language objLst in lstAllCultures)
{
    SCultureInfo objInfo = new SCultureInfo();
    objInfo.LanguageName = objLst.LanguageName;
    objInfo.LanguageCode = objLst.LanguageCode;
    lstCulture.Add(objInfo);
} 
于 2012-07-11T05:34:13.773 回答