关于foreach循环和arraylist

时间:2012-03-22 13:05:23

标签: c# foreach arraylist

ArrayList demo = new ArrayList();
demo.Add(tbxProjName.Text);
string DatabaseFieldValues;
foreach (string dataType in demo)
          {
             DatabaseFieldValues = dataType + ",";
              Response.Write(DatabaseFieldValues);

             Session["DatabaseFieldValuesSession"] = DatabaseFieldValues; 
          } 
Response.Write(Session["DatabaseFieldValuesSession"]);

在此代码中,

在foreach循环中,我能够打印arraylist的所有项目,并且我将该字符串存储在会话中,但是当我打印会话值时,它只打印arraylist的最后一项。

如何在会话中存储arraylist的所有项目?

4 个答案:

答案 0 :(得分:1)

使用以下代码:

ArrayList demo = new ArrayList();
demo.Add(tbxProjName.Text);
string DatabaseFieldValues;
foreach (string dataType in demo)
          {
             DatabaseFieldValues += dataType + ",";
              Response.Write(DatabaseFieldValues);
          } 

Session["DatabaseFieldValuesSession"] = DatabaseFieldValues; 
Response.Write(Session["DatabaseFieldValuesSession"]);

而不是DatabaseFieldValues = dataType +“,”;你应该使用DatabaseFieldValues + = dataType +“,”;

这很重要,因为您要添加数据类型。

答案 1 :(得分:0)

你的会话值会覆盖每个循环到最后一个项目,因为你错误地处理了字符串。

您必须记住字符串是不可变的 - 当您通过在末尾添加新字符串来更改字符串时,结果是新字符串,而不是原始字符串的修改。这就是+ =更改有效的原因,它将连接的新字符串结果存储到原始字符串中。

ArrayList demo = new ArrayList();
demo.Add(tbxProjName.Text);
string DatabaseFieldValues;
foreach (string dataType in demo)
{
    DatabaseFieldValues += dataType + ",";
    Response.Write(DatabaseFieldValues);
} 
Session["DatabaseFieldValuesSession"] = DatabaseFieldValues; 
Response.Write(Session["DatabaseFieldValuesSession"]);

我还建议从ArrayList转移到强类型集合

IList<string> demo = new List<string>();
demo.Add(tbxProjName.Text);

Session["DatabaseFieldValuesSession"] = string.Join(",",demo);

Response.Write(Session["DatabaseFieldValuesSession"]);

答案 2 :(得分:0)

每次更换时都要替换最后一个值

Session["DatabaseFieldValuesSession"] = DatabaseFieldValues; 

考虑做一些像

这样的事情
 Session["DatabaseFieldValuesSession"] += DatabaseFieldValues;

答案 3 :(得分:0)

或替代+=使用yield