索引是数组的外部边界

0 c#

当我运行它时,它说索引超出了数组的范围,但事实并非如此.如果我改变公共静态ConectorRec [] ch = new ConectorRec [74]; to ConectorRec [] ch = new ConectorRec [75]; 那么它们并不是都引用了一个对象,而是在我的代码的其他部分抛出了其他错误.

using System;
using System.Drawing;
using System.Windows;
using System.Windows.Forms;
using System.Collections.Generic;

namespace Dots
{
    public static class Conectors
    {
        public static ConectorRec[] ch = new ConectorRec[74];
        public static void intitialize()
        {
            ch[0] = new ConectorRec(new Rectangle(10, 20, 10, 40));
            ch[1] = new ConectorRec(new Rectangle(20, 10, 40, 10));
            ch[2] = new ConectorRec(new Rectangle(20, 60, 40, 10));
            ch[3] = new ConectorRec(new Rectangle(60, 20, 10, 40));
            int t = 0;
            int tt = 1;
            for (int i = 4; i<73; i++)
            {
                t++;
                if (t == 1)
                {
                    ch[i] = new ConectorRec(new Rectangle(50 * tt + 20, 10, 40, 10));
                }
                if (t == 2)
                {
                    ch[i] = new ConectorRec(new Rectangle(50 * tt + 20, 60, 40, 10));
                }
                if (t == 3)
                {
                    tt++;
                    ch[i] = new ConectorRec(new Rectangle(50 * tt + 10, 20, 10, 40));
                    t = 0;
                }
            }
            ch[74] = new ConectorRec(new Rectangle(10, 70, 10, 40));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

请告诉我我做错了什么以及如何解决这个错误.

Jon*_*eet 8

当我运行它时,它说索引超出了数组的范围,但事实并非如此

是的.即使我无法确定问题,我总是打赌运行时比开发者对此的看法更准确......

这是循环后的问题:

ch[74] = new ConnectorRec(...);
Run Code Online (Sandbox Code Playgroud)

你已经声明数组在这里有74个元素:

public static ConectorRec[] ch = new ConectorRec[74];
Run Code Online (Sandbox Code Playgroud)

因此有效索引为0..73(含).如果要使74成为有效索引,则需要声明它有75个元素:

public static ConectorRec[] ch = new ConectorRec[75];
Run Code Online (Sandbox Code Playgroud)