2009-08-25 4 views
3

Wie verwende ich für Schleife in vb.net so etwas wieFür jede Schleife in vb.net

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 

ich einige Daten für jeweils 500 Kunden verarbeiten wollen .. Bitte helfen

+0

Wollen Sie die Schleife auf der Liste der Kunden in Stücke von 500 Iterieren? –

+2

Können Sie klarstellen, was Sie mit "jeder 500 Kunden" meinen? –

+2

erstellen Sie keine "neue" Kundenliste, wenn Sie sie in der nächsten Zeile ersetzen möchten. –

Antwort

3

Erstellen Sie zunächst keine "neue" Kundenliste, wenn Sie der Referenz in der nächsten Zeile eine andere Liste zuweisen möchten. Das ist irgendwie dumm. Machen Sie es wie folgt aus:

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

Dann wird für die Schleife Sie eine einfache „For“ Schleife müssen, anstatt eine für jeden. Vergessen Sie nicht, vor dem Ende der Liste zu stoppen:

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

Wenn Sie Visual Studio 2008 verwenden könnten Sie es auch so schreiben:

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

Versuchen Sie, die folgenden

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

‚Diese bei 500 und Prozess bis zum Ende beginnen ....

for start as integer = 500 to Customers.Count 

'process customer.... 
customer = Customers(start) 

Next 

Um die gesamte Liste iterieren:

for each cust as Customer in Customers 

Next 

Eine Anmerkung .... VB ist Groß- und Kleinschreibung und Ihr Beispielcode scheint Kleinschreibung und Großbuchstaben Kunden wie diese

+0

Wenn ich dies für Start als Integer = 500 zu Customer.Count versuchen Ich bekomme einen Fehler, der Kunde kann nicht in int –

+0

konvertiert werden Sie müssen Ihren Kunden zu den Kunden (Start) Index ... – klabranche

1

Etwas zu verwenden: -

Dim customers as New List(Of Customer) 

Customers=dataAcess.GetCustomers() 

For Each customer AS Customer in Customers 
    '' // do something with the customer object 
Next 

bearbeiten

Klingt wie Sie 500 N Artikel auswählen möchten oder vielleicht die nächsten 500. Sie könnten die LINQ-Erweiterungsmethoden .Take und/oder .Skip verwenden, um dies zu erreichen. Verwenden Sie ToList, um Ihre Liste zu erstellen. E.g.:-

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

Wenn alles, was Sie Enum durch die Kunden tun wollen, dann können Sie mit ToList() verzichtet werden kann.

+0

Ich möchte tun es für jeden 500 Kunden. –

+0

Meinst du, du willst es vielleicht für jeden 500sten Kunden tun? Es ist immer noch unklar, was Sie erreichen möchten. – JohnFx

0

Sie können entweder versuchen:

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

Oder

For i As Integer = 0 To (customers.Count - 1) step 500 
     ''do something 
    Next 
0
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 

Ich glaube, Sie müssen den Kunden Index und Schritt in 500s verwenden. Dies verarbeitet nur Kunden (Start), Kunden (Start + 500), Kunden (Start + 1000) usw., nicht alle Kunden. Ist das was du vorhast?

0

Ich bin mir nicht ganz sicher, was Sie versuchen, zu tun, aber vielleicht könnten Sie dies versuchen:

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 

es mit allen Mitteln nicht elegant, aber es macht Sinn, und es wird funktionieren.

0

Offensichtlich gibt es keinen Mangel an Vielfalt. Ich erkenne den Objekttyp "DataAccess" nicht, aber wenn Sie diese Tabelle als Recordset (d. H. Eine SQL-Tabelle) abrufen können, versuchen Sie dies. (Vergessen Sie nicht, das Recordset zurückzugeben, wenn Sie fertig sind)