我一直在处理来自应用程序abd的窗口我似乎遇到了一个问题,我在尝试将文本框行添加到列表时遇到Index as out of rang of array
:
我目前的代码如下:
if (NameTB.Lines.Count() > 0)
for (int i = 1; 1 <= NameTB.Lines.Count(); i++)
nameList.Add(NameTB.Lines[i].Replace(Environment.NewLine, "").Trim());
我也试过这个:
if (NameTB.Lines.Length > 0)
for (int i = 1; 1 <= NameTB.Lines.Length; i++)
nameList.Add(NameTB.Text[i - 1].ToString().Replace(Environment.NewLine, "").Trim());
和
if (NameTB.Lines.Count() > 0)
for (int i = 1; 1 <= NameTB.Lines.Count(); i++)
nameList.Add(Convert.ToString(i).Replace(Environment.NewLine, "").Trim());
此外,尽管最后一个示例没有给出索引错误但却陷入了循环。我以前做过类似的事情,但使用WPF
和TextBox.GetLineText
,但要确定如何在Winforms
答案 0 :(得分:3)
使用此:
if (NameTB.Lines.Count() > 0)
for (int i = 0; i < NameTB.Lines.Count(); i++) //or i <= NameTB.Lines.Count() - 1
nameList.Add(NameTB.Lines[i].Replace(Environment.NewLine, "").Trim());
c#中的索引是从0开始的,所以你需要从0
开始(当然如果你不想从第二个元素开始)。
当然由IndexOutOfRangeException
条件引起的无限循环和1 <= NameTB.Lines.Count();
问题,您的i
无休止地增加,但NameTB.Lines
的数量有限元素,因此您应该使用i
而不是1
。
但只有将1
更改为i
才能解决您的问题,因为任何数组/集合中的元素数量 总是 大于最后一个元素的索引,所以你需要改变
i <= NameTB.Lines.Count();
到
i < NameTB.Lines.Count(); //or i <= NameTB.Lines.Count() - 1;
答案 1 :(得分:2)
请注意,数组是从零开始的,并且您的第二个参数似乎创建了一个超出最大数组索引Lines
的无限循环。正确的for循环结构应该是这样的:
if (NameTB.Lines.Count() > 0)
{
for (int i = 0; i < NameTB.Lines.Count(); i++)
{
nameList.Add(NameTB.Lines[i].Replace(Environment.NewLine, "").Trim());
}
}
另见:
What is an IndexOutOfRangeException / ArgumentOutOfRangeException and how do I fix it?
答案 2 :(得分:1)
1 <= NameTB.Lines.Count();
总是如此,因为你没有改变线的数量(你不应该这样)?
我想你要循环直到
i < NameTB.Lines.Count();
并希望从0开始,因为数组中的第一个索引是0
答案 3 :(得分:0)
试试这个:
if (NameTB.Lines.Count() > 0)
for (int i = 1; i <= NameTB.Lines.Count() - 1; i++)
nameList.Add(NameTB.Lines[i-1].Replace(Environment.NewLine, "").Trim());