【问题标题】:For each loop in vb.net对于 vb.net 中的每个循环
【发布时间】:2009-08-25 15:16:05
【问题描述】:

如何在 vb.net 中使用 for 循环

dim start as integer
Dim customers as New List(Of Customers)

Customers=dataAcess.GetCustomers()

For each start=500 in  Customers.count
  'Do something here'
Next

我想为每 500 个客户处理一些数据。请帮忙

【问题讨论】:

  • 您的意思是您希望循环以 500 个为单位对客户列表进行迭代吗?
  • 您能否解释一下“每 500 位客户”的含义?
  • 如果您只是要在下一行替换它,请不要创建“新”客户列表。

标签: .net vb.net foreach for-loop


【解决方案1】:

首先,如果您只想为下一行的引用分配不同的列表,请不要创建New 客户列表。这有点愚蠢。这样做:

Dim customers As List(Of Customer) = dataAccess.GetCustomers()

然后,对于循环,您需要一个普通的“For”循环而不是 for each。不要忘记在列表末尾之前停止:

For i As Integer = 500 To Customers.Count -1 
    'do something with Customers(i) here
Next i

如果你使用的是 Visual Studio 2008,你也可以这样写:

For each item As Customer in  Customers.Skip(500)
   'Do something with "item" here
Next

【讨论】:

    【解决方案2】:

    试试下面的

    For Each current In customers
      '' // Do something here 
      Console.WriteLine(current.Name)
    Next
    

    【讨论】:

      【解决方案3】:

      类似这样的:-

      Dim customers as New List(Of Customer)
      
      Customers=dataAcess.GetCustomers()
      
      For Each customer AS Customer in  Customers
         '' // do something with the customer object
      Next
      

      编辑

      听起来您想从 N 个项目中选择 500 个或下一个 500 个。您可以使用 LINQ 扩展方法 .Take 和/或 .Skip 来实现此目的。然后使用 ToList 创建您的列表。例如:-

      Dim customers as List(Of Customer)
      customers = dataAccess.GetCustomers().Skip(500).Take(500).ToList()
      

      如果您只想通过客户进行枚举,那么您可以省去 ToList()。

      【讨论】:

      • 我想为每500个客户做一次。
      • 你的意思是你想为每 500 个客户做一次,也许?目前还不清楚您要完成什么。
      【解决方案4】:

      '这将从500开始并处理到最后......

      for start as integer = 500 to Customers.Count
      
      'process customer....
      customer = Customers(start)
      
      Next
      

      迭代整个列表:

      for each cust as Customer in Customers
      
      Next 
      

      注意.... VB 不区分大小写,您的示例代码似乎使用小写和大写客户

      【讨论】:

      • 当我尝试从整数 = 500 到 Customer.Count 开始时,我收到一条错误消息,提示客户无法转换为 int
      【解决方案5】:
      Dim start as Integer
      Dim customers as New List(Of Customers)
      
      Customers = dataAcess.GetCustomers()
      
      For i as Integer = start to Customers.count Step 500
          Debug.Print Customers(i).someProperty
          Do something here
      Next i
      

      我认为您需要使用 Customer 索引和 Step in 500s。这将只处理客户(开始)、客户(开始+500)、客户(开始+1000)等,而不是所有客户。这是你的意图吗?

      【讨论】:

        【解决方案6】:

        我不太确定你想做什么,但也许你可以试试这个:

        Dim count As Integer = 0
        Const MAX_CUSTOMERS As Integer = 500
        Dim customers As List(Of Customers) = dataAcess.GetCustomers()
        
        For Each c As Customer In customers
            'do stuff here'
            c.Name = "Billy"
            count+=1
        
            If count = MAX_CUSTOMERS Then Exit For
        Next
        

        无论如何它都不优雅,但它是有道理的,并且会起作用。

        【讨论】:

          【解决方案7】:

          显然,不乏多样性。我不认识您的“DataAcess”对象类型,但如果您可以将该表作为记录集(即 SQL 表)拉入,请尝试此操作。 (完成后不要忘记返回记录集)

          Option Explicit
          
          Dim Customers As Recordset
          Set Customers=currentdb.openrecordset("???")
          
          While Customers.EOF=False
             'do stuff here using the recordset object
             'i.e. Customers.Fields("Name")="Billy"
             Customers.MoveNext
          Wend
          

          【讨论】:

            【解决方案8】:

            你可以试试:

                For i As Integer = 500 To (customers.Count -1)
                    ''do something
                Next
            

            或者

                For i As Integer = 0 To (customers.Count - 1) step 500
                    ''do something
                Next
            

            【讨论】:

              猜你喜欢
              • 2011-12-07
              • 1970-01-01
              • 2020-04-06
              • 2014-05-04
              • 2019-01-24
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多