C#数组超出范围

时间:2016-05-06 17:56:54

标签: c# wpf

我正在尝试在C#WPF中执行此数组。在这部分代码中:

buttons[1, 0] = button2x1;

它抛出:

  

System.IndexOutOfRangeException错误。

但我不认为这是超出范围的。发生了什么事?

        buttons = new Button[2, 2];

        buttons[0, 0] = button1x1;
        buttons[0, 1] = button1x2;
        buttons[0, 2] = button1x3;
        buttons[1, 0] = button2x1;
        buttons[1, 1] = button2x2;
        buttons[1, 2] = button2x3;
        buttons[2, 0] = button3x1;
        buttons[2, 1] = button3x2;
        buttons[2, 2] = button3x3;

3 个答案:

答案 0 :(得分:3)

数组(在C#中)是零索引,即你的第一个元素将在索引0,第二个在1,依此类推。声明数组时,声明期间提供的数字(新Button [2,2]中的2s)是数组可以容纳的元素数。考虑到它是基于0的索引,您的最高可能索引是声明的元素数量 - 1.有关数组的更多信息,请参阅msdn文档@ here

在您的情况下,当您执行class ItemHandler extends DefaultHandler { int idGiven = 101002; String foundName = null; private StringBuilder sb = new StringBuilder(); private String item_name; private int item_id; @Override public void startElement(String uri, String localName, String qName, Attributes attr) { sb.setLength(0); // Clear the buffer } @Override public void characters(char[] buffer, int start, int length) { sb.append(buffer, start, length); } @Override public void endElement(String uri, String localName, String qName) { switch(localName) { case "id": item_id = Integer.parseInt(sb.toString()); break; case "name": item_name = sb.toString(); break; case "item": if (item_id == idGiven) { foundName = item_name; } break; default: System.err.println("Unexpected tag: "+localName); } sb.setLength(0); // Clear the buffer } } 时 - 您正在尝试访问超出范围的索引,因此出现错误(请注意您的代码段中还有4个其他语句会导致此错误)。如果您需要这样做,请将声明更改为包含3个元素而不是2个。

buttons[0, 2] = button1x3;

答案 1 :(得分:1)

请记住,对数组的访问是通过从零开始的索引,因此您无法访问索引 2 ,只能 0,1

答案 2 :(得分:1)

当您创建一个包含2个索引的数组时,它只允许您使用两个:0和1

你必须记住,索引0也算作1。

做你想做的事:

buttons = new Button [3,3];

buttons[0, 0] = button1x1;
buttons[0, 1] = button1x2;
buttons[0, 2] = button1x3;
buttons[1, 0] = button2x1;
buttons[1, 1] = button2x2;
buttons[1, 2] = button2x3;
buttons[2, 0] = button3x1;
buttons[2, 1] = button3x2;
buttons[2, 2] = button3x3;

是3个索引,0,1和2。