将CopyTo命令与BitArrays一起使用时出错

本文关键字:出错 一起 BitArrays CopyTo 命令 | 更新日期: 2023-09-27 17:58:49

启动程序:以下是生成的错误:

目标数组不够长。检查destIndex和长度,以及数组的下限

代码:C#,ASP。净

环境:VS 2005

我正在做的是使用BitArray根据TreeView的特定条件翻转位。现在我正在遍历TreeView,如果从子节点检查节点,我将翻转BitArray中的索引。我有多个TreeView,我正在遍历,所以我有多个子数组。一旦我填充了所有的BitArrays,我就会将这些位转换为一个整数值(在某种意义上进行编码),并将它们放在一个int数组中。最终目标是将整数值推送到数据库中,但显然我做不到这一步。下面提供的示例代码:

        BitArray MTRTECH = new BitArray(8);
        BitArray MTRRD = new BitArray(200);
        BitArray REVSE = new BitArray(100);
        BitArray ETXA = new BitArray(100);
        int[] conversion = new int[11];

        ParentChildCheck(MTRTECHTreeView, MTRTECH);
        MTRTECH.CopyTo(conversion, 7);
        ParentChildCheck(MTRRDRTreeView, MTRRD);
        MTRRD.CopyTo(conversion, 8);  <================ Throws Error Here
        ParentChildCheck(REVSECTreeView, REVSE);
        REVSE.CopyTo(conversion, 9); 
        ParentChildCheck(EXTRATreeView, ETXA);
        ETXA.CopyTo(conversion, 10);

    protected void ParentChildCheck(TreeView parent, BitArray Changes)
    {
        TreeNode temp = new TreeNode();
        for (int index = 0; index < parent.Nodes.Count; index++)
        {
            temp = parent.Nodes[index];
            for (int index2 = 0; index2 < temp.ChildNodes.Count; index2++)
            {
                ChildCheck(temp.ChildNodes[index2],Changes,index2);
            }
        }
    }
    protected void ChildCheck(TreeNode node, BitArray Selection, int value)
    {
        message2 += node.Text;
        Selection.Set(value, true);
        counter++;
        for (int index = 0; index < node.ChildNodes.Count; index++)
        {
            value++;
            ChildCheck(node.ChildNodes[index],Selection,value);
        }
    }

将CopyTo命令与BitArrays一起使用时出错

BitArray MTRRD内部存储为7个Int32s的数组,目标数组conversion是11个Int32s的数组。当您执行复制时,您指定的索引为8,此索引是目标数组的索引,因此副本将溢出,因为您的指令不够长,无法包含从索引8开始的所有7个Int32s