Como interrompo um foreach
loop em C # se um dos elementos atende ao requisito?
Por exemplo:
foreach(string s in sList){
if(s.equals("ok")){
//jump foreach loop and return true
}
//no item equals to "ok" then return false
}
Como interrompo um foreach
loop em C # se um dos elementos atende ao requisito?
Por exemplo:
foreach(string s in sList){
if(s.equals("ok")){
//jump foreach loop and return true
}
//no item equals to "ok" then return false
}
Respostas:
foreach (string s in sList)
{
if (s.equals("ok"))
return true;
}
return false;
Como alternativa, se você precisar fazer outras coisas depois de encontrar o 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;
bool found = callFunctionInFirstCodeSnipper(list); // do stuff
Use break;
e isso sairá do loop foreach
Você pode evitar loops explícitos seguindo a rota LINQ:
sList.Any(s => s.Equals("ok"))
Contains("ok")
.
Contains
assume que você está repetindo uma ICollection<T>
. Any
funcionaria em qualquer coisa que fosse do tipo IEnumerable<T>
e, nesse caso, a pergunta não indica explicitamente em que tipo de coleção está sendo repetida (a List
é um palpite bastante justo).
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.
}
Deve fazer o truque. A instrução break acabará a execução do loop, enquanto a instrução return obviamente encerrará toda a função. A julgar pela sua pergunta, você pode querer usar o retorno true; declaração.
Use a instrução 'break'. Acho engraçado que a resposta à sua pergunta esteja literalmente na sua pergunta! A propósito, uma simples pesquisa no Google poderia ter lhe dado a resposta.
e quanto a:
return(sList.Contains("ok"));
Isso deve funcionar, se tudo o que você quer fazer é procurar um "ok" e retornar a resposta ...
Não é uma resposta direta à sua pergunta, mas existe uma maneira muito mais fácil de fazer o que você deseja. Se você estiver usando o .NET 3.5 ou posterior, pelo menos. É chamado Enumerable.Contains
bool found = sList.Contains("ok");
foreach(string s in sList)
{
if(s.equals("ok"))
{
return true;
}
}
return false;
Retorne direto do 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;
Ou 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
}
No entanto, no seu caso, pode ser melhor fazer algo assim:
if(sList.Contains("ok"))
{
// at least one element is "ok"
}
else
{
// no elements are "ok"
}
var ind=0;
foreach(string s in sList){
if(s.equals("ok")){
return true;
}
ind++;
}
if (ind==sList.length){
return false;
}
$
não é uma sintaxe C # válida.
var
é um C # palavra-chave perfeitamente válido, então você é bom
return "ok" in sList:
- não há algo comparável em c #?