2013-06-26 36 views
0

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

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

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

+0

你确定它是不是SDKRecordset PersoninboundSet = IQSDK.CreateRecordset(“R_PERSON”,“”,“PK_R_PERSON =” +一世 ,”” );只返回一条记录,是否通过它? – Bit

+0

您的列表包含字符串,而不是整数。 – Max

+2

您在第一次循环迭代结束时返回personmessages。这意味着循环不可能继续第一次迭代。我猜这不是你想要的行为。 –

回答

6

我认为你需要将回路移出循环。

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

我已经得到了解决方案,我忘记关闭该代码上方的循环if语句。但是,无论如何谢谢你,我会接受这个答案。 – Matheno

1

正如丹上面提到的,当你在一个函数调用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; 
1

它看起来像你已经得到了循环和检查混合的顺序。你想return personmessages以外的foreach循环。

假设你要找到每个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 
}