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 異なる cultureinfolstCulture値が返されます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 ループの最後の反復で割り当てられた値を保持するオブジェクトが 1 つだけあります。

于 2012-07-11T05:25:39.110 に答える
0

objInfoすべてののリストに同じインスタンスを追加していますlstAllCulturesLanguageNameのように見え、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 に答える
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 に答える