Ошибка при использовании команды CopyTo с BitArrays - PullRequest
0 голосов
/ 10 июня 2011

Starters: генерируется ошибка:

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

Код: C #, ASP.NET

Конверт: VS 2005

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

2 голосов
/ 10 июня 2011

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

...