Reputation: 5104
How do I break out of a foreach
loop in C# if one of the elements meets the requirement?
For example:
foreach(string s in sList){
if(s.equals("ok")){
//jump foreach loop and return true
}
//no item equals to "ok" then return false
}
Upvotes: 182
Views: 431905
Reputation: 168
this is an old question but just thought I would add this answer
you could also use a While
loop like this
string sample = "";
while(sample == "")
{
foreach(DataRow row in DataTable.Rows
sample = row["somecolumn"].ToString();
}
once the string 'sample' no longer = "" the loop will end
Upvotes: -3
Reputation: 31
how about:
return(sList.Contains("ok"));
That should do the trick if all you want to do is check for an "ok" and return the answer ...
Upvotes: 3
Reputation: 13
var ind=0;
foreach(string s in sList){
if(s.equals("ok")){
return true;
}
ind++;
}
if (ind==sList.length){
return false;
}
Upvotes: -4
Reputation: 8885
It's not a direct answer to your question but there is a much easier way to do what you want. If you are using .NET 3.5 or later, at least. It is called Enumerable.Contains
bool found = sList.Contains("ok");
Upvotes: 1
Reputation: 38842
foreach (string s in sList)
{
if (s.equals("ok"))
return true;
}
return false;
Alternatively, if you need to do some other things after you've found the item:
bool found = false;
foreach (string s in sList)
{
if (s.equals("ok"))
{
found = true;
break; // get out of the loop
}
}
// do stuff
return found;
Upvotes: 320
Reputation: 3764
foreach (var item in listOfItems) {
if (condition_is_met)
// Any processing you may need to complete here...
break; // return true; also works if you're looking to
// completely exit this function.
}
Should do the trick. The break statement will just end the execution of the loop, while the return statement will obviously terminate the entire function. Judging from your question you may want to use the return true; statement.
Upvotes: 38
Reputation: 12966
Either return straight out of the loop:
foreach(string s in sList){
if(s.equals("ok")){
return true;
}
}
// if you haven't returned by now, no items are "ok"
return false;
Or use break
:
bool isOk = false;
foreach(string s in sList){
if(s.equals("ok")){
isOk = true;
break; // jump out of the loop
}
}
if(isOk)
{
// do something
}
However, in your case it might be better to do something like this:
if(sList.Contains("ok"))
{
// at least one element is "ok"
}
else
{
// no elements are "ok"
}
Upvotes: 1
Reputation: 3138
foreach(string s in sList)
{
if(s.equals("ok"))
{
return true;
}
}
return false;
Upvotes: 1
Reputation: 120400
You could avoid explicit loops by taking the LINQ route:
sList.Any(s => s.Equals("ok"))
Upvotes: 62
Reputation: 173
You can use break
which jumps out of the closest enclosing loop, or you can just directly return true
Upvotes: 7