1

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

这是我的代码:其中 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;

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

4

3 回答 3

6

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

List<string> personmessages = new List<string>();
 foreach (string i in messages)
 {  
    //// Do stuff.
 }
 return personmessages;
于 2013-06-26T14:26:00.560 回答
1

正如 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;
于 2013-06-26T14:27:55.777 回答
1

看起来你已经把循环和检查的顺序搞混了。你想return personmessagesforeach循环之外。

假设您想找到 each ,如果messages找不到则返回错误,您需要将错误条件移到循环内。 messageforeach

 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
 }
于 2013-06-26T14:29:33.717 回答