C# 无法将文本框行添加到列表<;字符串>;

C# 无法将文本框行添加到列表<;字符串>;,c#,winforms,C#,Winforms,我一直在使用windows应用程序abd,在尝试向列表中添加文本框行时,我似乎遇到了一个问题,即索引超出了数组的范围: 我目前的代码如下: if (NameTB.Lines.Count() > 0) for (int i = 1; 1 <= NameTB.Lines.Count(); i++) nameList.Add(NameTB.Lines[i].Replace(Environment.NewLine, "

我一直在使用windows应用程序abd,在尝试向列表中添加文本框行时,我似乎遇到了一个问题,即索引超出了数组的范围:

我目前的代码如下:

 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.Count()>0)
对于(int i=1;1 0)
对于(int i=1;1 0)
对于(inti=1;1
1
1使用以下方法:

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());

i
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());


i行的最大数组索引。
。正确的for循环构造应如下所示:

if (NameTB.Lines.Count() > 0) 
{
    for (int i = 0; i < NameTB.Lines.Count(); i++)
    {
        nameList.Add(NameTB.Lines[i].Replace(Environment.NewLine, "").Trim());
    }
}
if(NameTB.Lines.Count()>0)
{
对于(int i=0;i
另见:


请注意,数组是以零为基的,您的第二个参数似乎创建了一个无限循环,该循环超过了
行的最大数组索引。正确的for循环构造应如下所示:

if (NameTB.Lines.Count() > 0) 
{
    for (int i = 0; i < NameTB.Lines.Count(); i++)
    {
        nameList.Add(NameTB.Lines[i].Replace(Environment.NewLine, "").Trim());
    }
}
if(NameTB.Lines.Count()>0)
{
对于(int i=0;i
另见:

试试这个:

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());
if(NameTB.Lines.Count()>0)
对于(inti=1;i请尝试以下方法:

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());
if(NameTB.Lines.Count()>0)

对于(int i=1;i,在本例中,他还将获得
indexootfrangeexception
,因为
在本例中,他还将获得
indexootfrangeexception
,因为
for
循环条件
1中,您可以通过
var lines=NameTB.Text.Split(Environment.NewLine.)选择(line=>line.Trim()).ToArray();
中,对于
循环条件
1,您可以通过
var lines=NameTB.Text.Split(Environment.NewLine)获取所有行。选择(line=>line.Trim()).ToArray();
您应该解释您的答案。另外,我通常使用
I<[…]。Count()
而不是
I是的,您可以使用Count()或Count()-1.我只想让它与原始代码相似,这样你就可以看到不同之处。;)你应该解释你的答案。另外,我通常使用
I<[…]。Count()
而不是
I是的,你可以使用Count()或Count()-1。我只想让它与原始代码相似,这样你就可以看到不同之处。;)您真的应该提到错误的产生,因为OP的for循环中的cacel条件是将
Count
与编号
1
进行比较,而不是索引变量。“它可能导致无限循环,但它永远不会引发IndexOutOfRangeException”是的,这正是无限增加
i
的结果。如果循环从未停止,
i
将在某个点上大于
Count
我在向下投票,因为你的答案没有解决问题的核心。核心是循环的取消条件,而不是起始值。你的帖子已经一个工作代码,但是您没有解释为什么首先出现问题,如果
不是必需的,那么可能值得注意
,因为它包含在
for
循环的continue条件中。您确实应该提到错误的产生,因为OP的for循环中的cacel条件是
Count 使用数字
1
而不是索引变量。“它可能导致无限循环,但它永远不会引发IndexOutOfRangeException”是的,这正是无限增加
i
的结果。如果循环从未停止,
i
将在某个点上大于
Count
我在向下投票,因为你的答案没有解决问题的核心。核心是循环的取消条件,而不是起始值。你的帖子已经一个有效的代码,但您没有解释问题首先出现的原因。如果
不是必需的,则可能值得注意
,因为它包含在
for
循环的continue条件中
i < NameTB.Lines.Count(); //or i <= NameTB.Lines.Count() - 1;
if (NameTB.Lines.Count() > 0) 
{
    for (int i = 0; i < NameTB.Lines.Count(); i++)
    {
        nameList.Add(NameTB.Lines[i].Replace(Environment.NewLine, "").Trim());
    }
}
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());