0

スターター: 生成されるエラーは次のとおりです。

宛先配列の長さが不十分です。destIndex と長さ、および配列の下限を確認してください。

コード: C#、ASP.NET

環境: VS 2005

私がやっていることは、BitArray を使用して、TreeView の特定の条件に基づいてビットを反転することです。現在、TreeView をトラバースしています。ノードが子からチェックされている場合は、BitArray のインデックスを反転します。トラバースしている複数の 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);
        }
    }
4

1 に答える 1

2

ソースBitArrayMTRRD は 7 の配列として内部的に保存され、Int32s宛先配列conversionは 11 の配列ですInt32sInt32sインデックス 8 を指定してコピーを実行すると、このインデックスは宛先配列へのインデックスであるため、インデックス 8 から始まる7 つすべてを含めるには十分な長さがないため、コピーはオーバーランします。

于 2011-06-10T19:15:37.213 に答える