有没有办法在vb.net循环中使用非线性步长?

时间:2011-05-04 21:45:16

标签: vb.net

我想在vb。

中执行以下c语句
for(int i = 2^20; i > 0; i/=2)
{
   printf("%d\n",i); 
}  

在vb中看起来类似于:

For i As Integer = 2^32 to 0 Step /2
   Console.Out.Writeline("{0}", i)
Next

具体地说,每次迭代i除以2的变量不是 合法的vb。

有没有办法使用允许的For语句来写这个?

2 个答案:

答案 0 :(得分:4)

不,VB中的FOR循环更短但灵活性更低。

显而易见的解决方法当然是一个While循环。

' untested
Dim i As Integer = 2^30  ' 2^32 will overflow
While i >= 0
   Console.Writeline("{0}", i)
   i = i Div 2
End While

答案 1 :(得分:1)

有两种典型方法:

  1. 导出一个公式,将线性(最好是整数值)索引转换为循环所需的任何值,然后使用这样的公式。
  2. 使用方法生成一个或多个“IEnumerable”以按顺序返回正确的值,然后将“For”替换为“For Each”

前一种方法是我经常使用的方法;我相信LINQ包含一些方法来促进后一种方法(比如Enumerable.Range),但我不知道细节。