0

私のC#関数は、一度に100個のリストオブジェクトを返します。この関数がリストを返さなくなるまでリストを埋めたいです。

私はこのようなことをしようとしています:

int lastSelectedId = 0;
while(ReturnListOfCustomers(lastSelectedId).Count > 0)
{
    List<Customers> newCustomers = ReturnListOfCustomers(lastSelectedId);
    CustomerList.Append(newCustomers);
    lastSelectedId  = newCustomers.Last().rowid;
}

...しかし、この場合ReturnListOfCustomers、ループごとに2回関数を呼び出す必要がありますが、一度に1つずつ呼び出すことで、関数を改善できますか?

ありがとう。

4

6 に答える 6

7

do/whileを使用できます

int lastSelectedId = 0;
int count;
do 
{
    List<Customers> newCustomers = ReturnListOfCustomers(lastSelectedId);
    count = newCustomers.Count;
    if (count > 0)
    {
        CustomerList.Append(newCustomers);
        lastSelectedId  = newCustomers.Last().rowid;
    }
} while (count > 0);
于 2012-08-21T22:57:00.400 に答える
2

ループごとに2つの呼び出しを削除するには、結果を変数に格納する必要があります。また、次のようにコードをリファクタリングします。

int lastSelectedId = 0;
List<Customers> newCustomers;

while ((newCustomers = ReturnListOfCustomers(lastSelectedId)).Count > 0)
{
    CustomerList.Append(newCustomers);
    lastSelectedId  = newCustomers.Last().rowid;
}

少なくとも私の意見では、do-whileループよりも見栄えが良いと思います。一方、do-whileループはおそらくより速く読みやすくなります。

于 2012-08-21T22:59:05.500 に答える
1

最初の呼び出しの結果を変数に格納します。

int lastSelectedId = 0;
var a = ReturnListOfCustomers(lastSelectedId);
while(a.Count > 0)
{
    List<Customers> newCustomers = a;
    CustomerList.Append(newCustomers);
    lastSelectedId  = newCustomers.Last().rowid;
    a = ReturnListOfCustomers(lastSelectedId);
}
于 2012-08-21T22:58:23.737 に答える
0

newCustomersリストをループの外に移動し、追加が完了した後、ループごとに1回リストを更新することで、ヒットを減らすことができます。

int lastSelectedId = 0;
List<Customers> newCustomers = ReturnListOfCustomers(lastSelectedId);
while (newCustomer.Count > 0)
{
    CustomerList.Append(newCustomers);
    lastSelectedId = newCustomers.Last().rowid;
    newCustomers = ReturnListOfCustomers(lastSelectedId);
}
于 2012-08-21T22:58:57.310 に答える
0

for単純なループの何が問題になっていますか?

for ( List<Customer> buffer = ReturnListOfCustomers(highWaterID) ; buffer.Count > 0 ; buffer = ReturnListOfCustomers( buffer[buffer.Count-1].rowid ) )
{
  CustomerList.Append(buffer);
}
于 2012-08-21T23:15:49.243 に答える
0

リストが増えたかどうかを確認してください

 // Assuming CustomerList is a List<Customers> defined and initialized somewhere
 int prevCount = -1;
 int lastSelectedId = 0;
 while (prevCount < CustomerList.Count) {
  prevCount = CustomerList.Count;
  CustomerList.Append(ReturnListOfCustomers(lastSelectedId));

  // Need to check for null return condition
  if (CustomerList.Count > 0) {
    lastSelectedId = CustomerList.Last().rowId;
  }
}
于 2012-08-21T23:18:36.473 に答える