Vb.net 对于i=StartIndex到1步骤-1(索引超出了(i-1)的数组边界)

Vb.net 对于i=StartIndex到1步骤-1(索引超出了(i-1)的数组边界),vb.net,Vb.net,我怎样才能使我的代码不超出范围 Dim StartIndex = TextBox1.Lines.Length - 1 For i = StartIndex To 0 Step -1 Dim strx = TextBox1.Lines(i - 1) 我提到,我还将For I=StartIndex更改为1步骤-1,但它显示了我的值​​少了一个单位就错了。我不确定他会不会犯这样的错误 基本上,我必须使这段代码正常工作,而不会超出范围。但是,对于I=StartIndex到0步骤-1,哪一步应该有效?如

我怎样才能使我的代码不超出范围

Dim StartIndex = TextBox1.Lines.Length - 1
For i = StartIndex To 0 Step -1
Dim strx = TextBox1.Lines(i - 1)
我提到,我还将For I=StartIndex更改为1步骤-1,但它显示了我的值​​少了一个单位就错了。我不确定他会不会犯这样的错误

基本上,我必须使这段代码正常工作,而不会超出范围。但是,对于I=StartIndex到0步骤-1,哪一步应该有效?如果有人能向我确认,对于I=StartIndex到1步骤-1,它没有错误,那么我就这样离开他。它只显示了我需要少一个单位

Dim strx = TextBox1.Lines(i - 1)
有几件事:

显式键入变量 仅在循环外部获取TextBox的Lines属性一次 从数组长度减1迭代到1,而不是从0迭代 将行的尺寸标注为String=TextBox1.行 对于i作为整数=行。长度-1到1步-1 尺寸strx为字符串=线SI-1 下一个
但是,只要简单地查看一下代码,就好像不应该从数组长度减去1进行迭代,因为在For/Next循环中获得当前迭代的项时,要减去1。

是否使用了逐步调试程序?我认为当我达到值0时,在i-1处,它将超出范围。这就是为什么我必须为它做一个修复。dim lines=TextBox1.lines.Reverse.ToArray TextBox1.lines=lines。否则,避免下到索引-1 dim strx=TextBox1.lines。然后实际解释您试图实现的内容,而不是或除了您试图实现的方式。首先,不要反复使用TextBox1.lines。该属性创建每次访问时都会有一个新数组,这是非常低效的。首先将属性值赋给一个变量,然后多次使用该变量,以便每次都使用相同的数组。