C#在返回对象列表时运行函数

C#在返回对象列表时运行函数,c#,function,while-loop,C#,Function,While Loop,我的C#函数一次返回100个列表对象。我想填写一个列表,直到这个函数不返回任何列表 我正在尝试这样做: int lastSelectedId = 0; while(ReturnListOfCustomers(lastSelectedId).Count > 0) { List<Customers> newCustomers = ReturnListOfCustomers(lastSelectedId); CustomerList.Append(newCustome

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

我正在尝试这样做:

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

while ((newCustomers = ReturnListOfCustomers(lastSelectedId)).Count > 0)
{
    CustomerList.Append(newCustomers);
    lastSelectedId  = newCustomers.Last().rowid;
}
int lastSelectedId=0;
while(返回客户列表(lastSelectedId)。计数>0)
{
列出新客户=返回客户列表(lastSelectedId);
CustomerList.Append(新客户);
lastSelectedId=newCustomers.Last().rowid;
}
…但在这种情况下,我必须在每个循环中调用
ReturnListOfCustomers
函数两次, 我能一次叫一个更好吗

谢谢。

您可以使用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);
int lastSelectedId=0;
整数计数;
做
{
列出新客户=返回客户列表(lastSelectedId);
计数=新客户。计数;
如果(计数>0)
{
CustomerList.Append(新客户);
lastSelectedId=newCustomers.Last().rowid;
}
}而(计数>0);

将第一次调用的结果存储在变量中

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);
}
int lastSelectedId=0;
var a=客户返回列表(最后选择的EDID);
而(a.计数>0)
{
列出新客户=a;
CustomerList.Append(新客户);
lastSelectedId=newCustomers.Last().rowid;
a=客户返回列表(最后选择的EDID);
}

您可以通过将
newCustomers
列表移到循环外部,然后在完成追加后,每个循环更新列表一次,从而减少点击次数

int lastSelectedId = 0;
List<Customers> newCustomers = ReturnListOfCustomers(lastSelectedId);
while (newCustomer.Count > 0)
{
    CustomerList.Append(newCustomers);
    lastSelectedId = newCustomers.Last().rowid;
    newCustomers = ReturnListOfCustomers(lastSelectedId);
}
int lastSelectedId=0;
列出新客户=返回客户列表(lastSelectedId);
而(newCustomer.Count>0)
{
CustomerList.Append(新客户);
lastSelectedId=newCustomers.Last().rowid;
newCustomers=返回的客户列表(lastSelectedId);
}

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

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

while ((newCustomers = ReturnListOfCustomers(lastSelectedId)).Count > 0)
{
    CustomerList.Append(newCustomers);
    lastSelectedId  = newCustomers.Last().rowid;
}
int lastSelectedId=0;
列出新客户;
而((newCustomers=ReturnListOfCustomers(lastSelectedId)).Count>0)
{
CustomerList.Append(新客户);
lastSelectedId=newCustomers.Last().rowid;
}

至少在我看来,我认为它看起来比DoWhile循环更好。另一方面,do while循环的可读性可能更快。

简单的
for
循环有什么问题

for ( List<Customer> buffer = ReturnListOfCustomers(highWaterID) ; buffer.Count > 0 ; buffer = ReturnListOfCustomers( buffer[buffer.Count-1].rowid ) )
{
  CustomerList.Append(buffer);
}
for(List buffer=ReturnListOfCustomers(highWaterID);buffer.Count>0;buffer=ReturnListOfCustomers(buffer[buffer.Count-1].rowid))
{
CustomerList.Append(缓冲区);
}
只需查看您的列表是否增长:

 // 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;
  }
}
//假设CustomerList是在某处定义和初始化的列表
int prevCount=-1;
int lastSelectedId=0;
while(prevCount0){
lastSelectedId=CustomerList.Last().rowId;
}
}

count永远不会增加DJ。。thi将作为do{}while循环工作得最好。Count的值将与原始示例中的值相同。按照他的描述,这是正确的。对于循环的每次迭代,计数将应用于存储在同一变量中的新数组。如果您正在执行附加以外的操作,则使用do/while可以检查计数两次以保持相同的功能。检查它以查看是否应该执行循环体的其余部分,然后再次检查循环条件。我几乎总是喜欢直接的while循环而不是do/while。这段代码不起作用。。。当newCustomers.Count==0时,您将在设置lastSelectedId时遇到异常,需要在最后一项的周围设置一个保护条件,这将向CustomerList追加一个空列表,然后,由于newCustomers为空(Count=0),它将在last()上引发异常。rowid;哦,因为我已经多年没有使用do while了,我几乎忘记了这个关键词的存在:)非常感谢!