C#:ArrayList.Clear()清除错误的数组

时间:2016-03-29 18:57:25

标签: c# arrays arraylist

我在C#中使用ArrayList来做一些事情。 我有2个ArrayLists(对齐和最佳),并且在特定时间内,我在“for”例程中做出最佳=对齐。

问题是,在循环结束时,我做了align.Clear,但是在这个时候,数组“best”也被清除了。在循环之后,当我必须使用数组“最好”时,我会遇到麻烦,因为它被清除了,我试图访问它的索引。

有什么问题?

这是我的一段代码:

public string AntColony()
{
   ArrayList align = new ArrayList();
   ArrayList best = new ArrayList();

   for(int z=0;z<n_ants;z++)
   {
      //do the things i have to do
      //full the array "align" with something (this will have two "adds", so, this array is a 2 lines array)

      score = Score(align);
      UpdatePhero(tao, path, score);

      if (score > score_before)
      {
         score_before = score;
         best = align;
      }
      align.Clear(); //clear the array align
   }
   string s = best[0].ToString() + "\r\n\r\n" + best[1].ToString() + "\r\n\r\n Number of matches: " + n_matches + "\r\n\r\n Score: " + score;

   return s;
}

谢谢!

2 个答案:

答案 0 :(得分:2)

数组变量是引用类型。当您致电best=align时,您并非align的内容复制array,您正在制作它以便他们指向同一个地方,即他们参考相同的记忆位置。

尝试best=align.Clone()

答案 1 :(得分:0)

由于align是临时的,因此可以在调用Score之前重新创建,并在需要时分配为最佳:

public string AntColony()
{
    ArrayList best = null;

    for(int z=0;z<n_ants;z++)
    {
      //do the things i have to do
      //full the array "align" with something (this will have two "adds", so, this array is a 2 lines array)

      ArrayList align = new ArrayList();
      score = Score(align);
      UpdatePhero(tao, path, score);

      if (score > score_before)
      {
         score_before = score;
         best = align;
      }
    }

    if (best != null)
    {
        string s = best[0].ToString() + "\r\n\r\n" + best[1].ToString() + "\r\n\r\n Number of matches: " + n_matches + "\r\n\r\n Score: " + score;
        return s;
    }

    // TODO: Report failure here

    return null;
}