C# 数组外部索引内部循环

C# 数组外部索引内部循环,c#,arrays,C#,Arrays,我得到一个错误索引超出了数组的界限,我试着做一些简单的数学运算,并将它保存在我的列表中 List<int> integerList = new List<int>(); for (int a = 0; a < textBox1.Text.Length; a++) { for (int b = 8; b > 1 ; b--) { int

我得到一个错误索引超出了数组的界限,我试着做一些简单的数学运算,并将它保存在我的列表中

        List<int> integerList = new List<int>();
        for (int a = 0; a < textBox1.Text.Length; a++)
        {
            for (int b = 8; b > 1 ; b--)
            {
                integerList.Add(int.Parse(textBox1.Text[a * b].ToString())); //this line
            }


        }
        listBox1.DataSource = integerList;

然后我想存储这些乘法的总和,以供以后使用

可能是
textBox1.Text
超出了范围。在使用索引器之前,请尝试添加检查:

if (a*b < textBox1.Length)
    integerList.Add(int.Parse(textBox1.Text[a * b].ToString())); //this line
if(a*b
索引a*b超出了文本框内容的范围。您必须采取适当的保护措施,以确保不会使用超出范围的索引为文本框的字符串内容编制索引

抱歉,没有时间阅读已编辑的问题。根据新的描述,如果用户输入
4565457
,您希望将该字符串中的每个字符从位置
0
到最后(
6
,在本例中)与
8-位置相乘。下面的循环single
for
loop就可以了

List<int> integerList = new List<int>();
var l = textBox1.Text.Length;
for (int a = 0, b = 8; a < l && b > 1; a++, b--)
{
    integerList.Add((Convert.ToInt16(textBox1.Text[a]) * b)); //this line
}
listBox1.DataSource = integerList;
试试这个:

List<int> integerList = new List<int>();
var l = textBox1.Text.Length;
for (int a = 0; a < l; a++)
{
    for (int b = 8; b > 1 && (a*b) < l ; b--)
    {
        integerList.Add(int.Parse(textBox1.Text[a * b].ToString())); //this line
    }
}
listBox1.DataSource = integerList;
List integerList=newlist();
var l=textBox1.Text.Length;
对于(int a=0;a1&(a*b)
a*b
超过了文本框中文本的长度,因此添加
&&(a*b)>l
可以控制该长度。

试试这个(因为您可能想用b值计算a数的值):

List integerList=newlist();
对于(int a=0;a1;b--)
{
integerList.Add(int.Parse(textBox1.Text[a].ToString())*b);//此行
}
}
listBox1.DataSource=整数列表;

这一行
textBox1.Text[a*b]
可能是问题的根源。没有边界检查,
a*b
的计算结果可能大于
textBox1
的最终索引。我没有一个很好的解决方案给你,因为我真的不明白你想做什么。。。内部for循环中的表达式通常意义不大


您可以简单地检查a*b是否小于
textBox1.Text.Length
,以防止出现异常,但这可能不会使代码达到您实际希望的效果。

如果使用此方法,列表框中的输出仅为1?没有错误。我也是这么想的,你看过我的答案了吗?这不是你想要的吗?不,如果我使用你的方法,仍然会出现相同的错误。当将行更改为此时,仍然会出现边界外异常?textBox1.Text[a].ToString()?没有,但我正在尝试将a和b都添加到整数列表中,然后将它们相乘,并在我的列表框中显示结果。使用int数组可能更好。
416
371
324
265
208
159
110
List<int> integerList = new List<int>();
var l = textBox1.Text.Length;
for (int a = 0; a < l; a++)
{
    for (int b = 8; b > 1 && (a*b) < l ; b--)
    {
        integerList.Add(int.Parse(textBox1.Text[a * b].ToString())); //this line
    }
}
listBox1.DataSource = integerList;
    List<int> integerList = new List<int>();
    for (int a = 0; a < textBox1.Text.Length; a++)
    {
        for (int b = 8; b > 1 ; b--)
        {
            integerList.Add(int.Parse(textBox1.Text[a].ToString()) * b); //this line
        }


    }
    listBox1.DataSource = integerList;