C# foreach loop

本文关键字:loop foreach | 更新日期: 2023-09-27 18:20:03

我有一个列表,其中包含一些值,现在,我想获取数组中ID所在的所有数据和值。现在的问题是,当数组中有13个整数时,我只得到1个结果,所以它不会循环。

这是我的代码:其中messages是带整数的数组。

 List<string> messageList = new List<string>();
 foreach (string i in messages)
 {  
     Recordset Persons = SDK.Create("R_PERSON", "", "PK_R_PERSON = "+i ,"" );
     if (Persons != null && Persons.RC > 0)
     {                   
         Persons.MoveFirst();
         do
         {
             string firstname = Persons.Fields["FIRSTNAME"].Value.ToString();
             string lastname = Persons.Fields["LASTNAME"].Value.ToString();
             personmessages.Add(firstname);
             personmessages.Add(lastname);
             PersoninboundSet.MoveNext();
         }
         while (!PersoninboundSet.EOF);
     }
     return personmessages;
 }

 messages.Add("Error, didn't work.");
 return messages;// null;

有人能告诉我我做错了什么吗?

C# foreach loop

我认为您需要将返回移到循环之外。

List<string> personmessages = new List<string>();
 foreach (string i in messages)
 {  
    //// Do stuff.
 }
 return personmessages;

正如Dan前面提到的,当您在函数中调用return时,即使函数还没有完成循环,您也会离开它。如果您想为循环的每次迭代都有一个单独的返回,我建议将每个结果存储在一个数组中,然后在循环结束时简单地返回数组。

List<string> personmessages = new List<string>();
List[] messageArray = new List[messages.length()];
foreach (string i in messages)
{  
    SDKRecordset PersoninboundSet = IQSDK.CreateRecordset("R_PERSON", "", "PK_R_PERSON = "+i ,"" );
 if (PersoninboundSet != null && PersoninboundSet.RecordCount > 0)
 {
     PersoninboundSet.MoveFirst();
     do
     {
         string firstname = PersoninboundSet.Fields["FIRSTNAME"].Value.ToString();
         string lastname = PersoninboundSet.Fields["LASTNAME"].Value.ToString();
         personmessages.Add(firstname);
         personmessages.Add(lastname);
         PersoninboundSet.MoveNext();
     }
     while (!PersoninboundSet.EOF);
 }
 messageArray[i] =  personmessages;
}
return messageArray;

看起来循环和检查的顺序混淆了。您希望在foreach循环之外return personmessages

假设您想找到每个messages,并且如果找不到任何message,则返回一个错误,那么您将希望在foreach循环中移动您的错误条件。

 List<string> personmessages = new List<string>();
 foreach (string i in messages)
 {  
     SDKRecordset PersoninboundSet = IQSDK.CreateRecordset("R_PERSON", "", "PK_R_PERSON = "+i ,"" );
     if (PersoninboundSet != null && PersoninboundSet.RecordCount > 0)
     {
         PersoninboundSet.MoveFirst();
         do
         {
             string firstname = PersoninboundSet.Fields["FIRSTNAME"].Value.ToString();
             string lastname = PersoninboundSet.Fields["LASTNAME"].Value.ToString();
             personmessages.Add(firstname);
             personmessages.Add(lastname);
             PersoninboundSet.MoveNext();
         }
         while (!PersoninboundSet.EOF);
     } 
     else 
     {
         // *this* i could not be found
         messages.Add("Error, didn't work.");
         return messages;// null;
     }
 }
 return personmessages; // after we've processed *all* messages

或者,如果找不到message,您可能希望返回一个错误。在这种情况下,将错误检查保持在循环之外,但检查Count以确定:

 List<string> personmessages = new List<string>();
 foreach (string i in messages)
 {  
     SDKRecordset PersoninboundSet = IQSDK.CreateRecordset("R_PERSON", "", "PK_R_PERSON = "+i ,"" );
     if (PersoninboundSet != null && PersoninboundSet.RecordCount > 0)
     {
         PersoninboundSet.MoveFirst();
         do
         {
             string firstname = PersoninboundSet.Fields["FIRSTNAME"].Value.ToString();
             string lastname = PersoninboundSet.Fields["LASTNAME"].Value.ToString();
             personmessages.Add(firstname);
             personmessages.Add(lastname);
             PersoninboundSet.MoveNext();
         }
         while (!PersoninboundSet.EOF);
     }
 }
 if (personmessages.Count == 0) 
 {
     // none found
     messages.Add("Error, didn't work.");
     return messages;// null;
 }      
 else
 {
     return personmessages; // after we've processed *all* messages
 }