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;
有人能告诉我我做错了什么吗?
我认为您需要将返回移到循环之外。
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
}