0

我的 C# 函数一次返回 100 个列表对象。我想填写一个列表,直到这个函数不返回任何列表。

我正在尝试做这样的事情:

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

...但在这种情况下,我将不得不在ReturnListOfCustomers每个循环中调用两次函数,我可以通过一次调用一个来使其更好吗?

谢谢。

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

为了删除每个循环的两个调用,您必须将结果存储在一个变量中。我也会像这样重构你的代码:

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列表移到循环之外来减少命中,然后在完成附加后在每个循环中更新一次列表。

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

只需检查您的列表是否增长:

 // 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 回答
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 回答