索引超出了数组的范围:IndexOutOfRangeException未被用户代码处理

时间:2012-09-19 19:38:00

标签: c# arrays

我今天似乎正在失去它。任何人都可以帮我找到我在这里做错的事情:

1. for (int y = 0; y < 5; y++)
2. {
3.      IDataReader getLineInfo = DB.GetRS("Select LineText From TIF Where SCRID ='" + scRID + "' AND LineNum='" + y + "'");
4.      if (getLineInfo.Read())
5.      {
6.            string[] lineText = new string[y];
7.            lineText[y] = (string)getLineInfo["LineText"];
8.
9.            ((Label)item.FindControl(string.Format("lbl{0}", y))).Text = "<a href='" + lineText[y] + "' target='_blank'> Link</a>";
10.     }
11.     getLineInfo.Dispose();
12.     getLineInfo.Close();
13. }

我在第9行得到了错误。我最初的'y'从1开始,因为没有lineNum == 0 ..但我想,因为数组从0开始,我在那里搞乱了。但这并没有解决我的问题。如果有人可以帮我看看我不是,我将不胜感激。此页面上没有用户输入因为我知道使用select语句的整个IDataReader可能不好。

如果需要任何其他信息,我可以将其写入,并感谢任何可以提供帮助的人

4 个答案:

答案 0 :(得分:3)

string[] lineText = new string[y];  // array 0 .. y-1
lineText[y] = ...;                  // y = 1 element too far

此外,lineText是在循环内部本地创建的,您可以简单地将string[] lineText替换为string lineText并忘记y

如果您认为自己需要y,则此代码中还有其他错误/缺失。

答案 1 :(得分:2)

为什么不使用字符串而不是字符串数组?

string lineText = (string)getLineInfo["LineText"];

((Label)item.FindControl(string.Format("lbl{0}", y))).Text = "<a href='" lineText + "' target='_blank'> Link</a>";

答案 2 :(得分:1)

有充分的理由

string[] lineText = new string[y];

在循环内? `

而且,如果你分配一个'y'元素数组,那么访问索引'y'的元素必然会引发异常。在'y'元素数组中,最后一个元素位于索引'y-1'(从0开始)。

答案 3 :(得分:0)

你需要像这样声明你的数组

 string[] lineText = new string[y+1];