我有这个网络方法。
[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
中调试它带来正确的值.1010不同的cultureinfo值。但是当我看到lstCulture
后它的最后一个值lstAllCultures
。
我做错了什么。谢谢。
答案 0 :(得分:4)
您需要在循环内创建新对象(SCultureInfo),而不是在外部。
foreach (Language objLst in lstAllCultures)
{
SCultureInfo objInfo = new SCultureInfo();
objInfo.LanguageName = objLst.LanguageName;
objInfo.LanguageCode = objLst.LanguageCode;
lstCulture.Add(objInfo);
}
在原始代码中,您只有一个对象,在列表中多次添加并保存在foreach循环的最后一次迭代中指定的值。
答案 1 :(得分:0)
将其更改为:
foreach (Language objLst in lstAllCultures)
{
SCultureInfo objInfo = new SCultureInfo();
objInfo.LanguageName = objLst.LanguageName;
objInfo.LanguageCode = objLst.LanguageCode;
lstCulture.Add(objInfo);
}
答案 2 :(得分:0)
因为你在foreach循环之外实例化objInfo,并且通过在列表中添加对象,你只是添加对象的REFERENCE,然后对foreach循环中对象的任何修改都将应用于列表。
如何移动线
SCultureInfo objInfo = new SCultureInfo();
在foreach循环中
foreach (Language objLst in lstAllCultures)
它是否有效?
答案 3 :(得分:0)
您要为每个objInfo
添加相同的lstAllCultures
实例到列表中。看起来LanguageName
和LanguageCode
是引用类型。因此,每次为objInfo
分配新值时,它都会使用值更新实例,并且多次添加时,您会看到重复的值相同。
要解决此问题,请每次在foreach中创建一个新的objInfo
,如
foreach (Language objLst in lstAllCultures)
{
SCultureInfo objInfo = new SCultureInfo();
objInfo.LanguageName = objLst.LanguageName;
objInfo.LanguageCode = objLst.LanguageCode;
lstCulture.Add(objInfo);
}