【问题标题】:Arraylist.add() is overwriting all the values in the Arraylist built by a loop in c#Arraylist.add() 正在覆盖由 c# 中的循环构建的 Arraylist 中的所有值
【发布时间】:2014-06-24 05:15:28
【问题描述】:

Arraylist.add() 正在覆盖由 c# 中的循环构建的 Arraylist 中的所有先前值。代码是:

public ArrayList MakeList(int size,  int iterations)
{
    ArrayList myList = new ArrayList(iterations);

    for (int run = 0; run < iterations; run++)
    {
        byte[] _byteArray = new byte[size];
        bool success = false;
        while (!success)
        {
            //Some Operations 
            if(condition)
               success = true;
           else 
              continue;
            if(success)
              break;

        }
        myList .Add(_byteArray );
    }

    return myList;
}

上面的循环总是用最新的字节数组覆盖 List 中的值。请帮我解决这个问题。

【问题讨论】:

  • “覆盖”是什么意思? ArrayList myList = new ArrayList(iterations); --- 这里是空的。所以没有什么可以覆盖
  • 您不应该使用ArrayList 开始。使用通用T[] 数组或List&lt;T&gt;。现在已经不是 2003 年了……
  • 旁注:success = true 在循环中没有任何条件。意味着您只需进行一次循环迭代。你的问题仍然不完整。
  • 我感觉 OP 试图简化代码以使其成为一个易于阅读的问题,但在途中删除了一些关键代码行......
  • 发布的代码没有显示明显的错误。尝试创建一个小而完整的(控制台)应用程序来演示您的问题。

标签: c# arraylist


【解决方案1】:

Karthick 最初我认为这是一个深拷贝或浅拷贝的问题,但只要您在 for 循环中初始化字节数组,它应该可以完美运行。我在最后尝试了以下示例代码,当函数 MakeList 即将返回时它工作得很好。 myList 指向的三个字节数组包含 00,01,11,因为我已插入它们,并且没有您建议的覆盖。为了快速输出,我硬编码了几个参数:

public class Program
    {
        public static void Main(string[] args)
        {
            var col = new ColTest();
            col.MakeList();
         }        
}

public class ColTest
    {
        public ArrayList MakeList()
        {
            var capacity = 3;
            ArrayList myList = new ArrayList(capacity);
            int size = 2;
            for (int run = 0; run < capacity; run++)
            {
                byte[] _byteArray = new byte[size];

                if (run == 0)
                {
                    _byteArray[0] = 0;
                    _byteArray[1] = 0;
                }
                else if (run == 1)
                {
                    _byteArray[0] = 0;
                    _byteArray[1] = 1;
                }
                else if (run == 2)
                {
                    _byteArray[0] = 1;
                    _byteArray[1] = 1;
                }

                myList.Add(_byteArray);
            }

            return myList;
        }
    }

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2014-05-25
    • 1970-01-01
    • 1970-01-01
    • 2019-05-06
    • 1970-01-01
    • 2014-11-25
    • 1970-01-01
    • 2012-09-19
    • 2016-10-10
    相关资源
    最近更新 更多