Ошибка при использовании команды CopyTo с битовыми массивами

#c# #asp.net #treeview #bitarray

#c# #asp.net #просмотр дерева #битный массив

Вопрос:

Для начала: Вот ошибка, которая генерируется:

Целевой массив был недостаточно длинным. Проверьте destIndex и длину, а также нижние границы массива.

Код: C #, ASP.NET

Env: VS 2005

Что я делаю, так это использую BitArray для переключения битов на основе определенного состояния TreeView. Прямо сейчас я просматриваю TreeView, и если узел проверяется из дочернего, я переверну индекс в BitArray. У меня есть несколько просмотров дерева, которые я просматриваю, поэтому у меня есть несколько 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);
        }
    }
  

Ответ №1:

Ваш исходный BitArray MTRRD хранится внутри в виде массива из 7 Int32s , ваш целевой массив conversion представляет собой массив из 11 Int32s . Когда вы выполняете копирование, вы указываете индекс, равный 8, этот индекс является индексом в массив назначения, поэтому копия будет переполнена, потому что ваше удаление недостаточно длинное, чтобы содержать все 7 Int32s , начиная с индекса 8.

Комментарии:

1. Спасибо. После того, как я бился головой о стену в течение 2 часов, я опубликовал .. затем сразу после публикации понял, что я идиот. Исправлено. пошел, чтобы удалить ее, и я увидел, что вы ответили.