none
Retornar à condicional ForEach RRS feed

  • Pergunta

  • Boa tarde galerinha... NO exemplo a seguir:

    if ((ds.Tables.Count > 0) && (ds.Tables[0].Rows.Count > 0)) { convidado = new List<Convidado>(); foreach (DataRow row in ds.Tables[0].Rows) { /// TESTES /// if( alguma condição) { Return false; }

    } <-- Fecha o ForEach trans.commit();


    Neste método ele procura por N registros, pode chegar a uma quantia grande ... Entre nestes, vai ter alguns FALSE e alguns TRUE. Preciso que quando chegar naquele "Return false;" preciso que ele volte para o ForEach desde o começo... Mas desta forma, agora... Ele está saindo do ForEach e caindo na última chave. . . Quero que ele volte para o ForEach, alguma dica ?

    Não precisa ser bool, eu pus assim, pois assim funcionava, mas agora parou. Já tentei usar break; e também não deu =s




    • Editado Alan Naidon terça-feira, 27 de novembro de 2012 16:16
    terça-feira, 27 de novembro de 2012 13:39

Respostas

  • Aqui está a respostas:

    if((ds.tables.count >0) && (ds.tables[0].Rows.Count>))
    
             {
               foreach(Datarow row in ds.rows)
    
                 {
                   if(Condição)
                       {
                        CONTINUE;  <-- Isso que eu queria fazer
                       }
    
                 }
    
    
    
              }

    Desta forma, usando o Continue; ele pula para o próximo registro (=

    fonte: Poste do nosso companheiro de forum Rudson Kiyoshi

    • Marcado como Resposta Alan Naidon terça-feira, 27 de novembro de 2012 16:35
    terça-feira, 27 de novembro de 2012 16:35

Todas as Respostas

  • Envolva seu foreach com um while:

    while (condicao_saida_while) 
    {
        foreach (DataRow row in ds.Tables[0].Rows)
       {
           /// TESTES ///
    
        if( alguma condição)
            {
             break; // sai for do foreach
            }
       }  <-- Fecha o ForEach
    
    
    }

    att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    Sogi informatique ltée

    terça-feira, 27 de novembro de 2012 13:45
    Moderador
  • Rapaz,

    Utiliza um "for" ao invés de um "foreach", então quando chegar no "return false" você seta a variável que serve como índice para o valor inicial. Assim o "for" reinicia.

    Pra fazer isso com foreach, você teria de fazer de forma recursiva. Criaria um método só com o "foreach" e quando chegasse no "return false" você chamaria o mesmo método outra vez. Desconheço outra forma.

    Abraço!

    terça-feira, 27 de novembro de 2012 13:46
  • Envolva seu foreach com um while:

    while (condicao_saida_while) 
    {
        foreach (DataRow row in ds.Tables[0].Rows)
       {
           /// TESTES ///
    
        if( alguma condição)
            {
             break; // sai for do foreach
            }
       }  <-- Fecha o ForEach
    
    
    }

    att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    Sogi informatique ltée

    Assim... Tenho que ler registros de uma tabela, e fazer testes se já passou de 1hora. Se já passou, eu faço alguns Updates e Inserts, caso contrário, volte para o começo do IF e teste outro registro. E por fim, dar Transaction.Commit();

    Poderia me dar um exemplo ?

    terça-feira, 27 de novembro de 2012 13:49
  • Espere um momento.. vc quer retonar ao começo do IF ou ao começo do FOREACH..

    Esta confuso o que vc quer fazer...  isso é um windows service?

    Sugiro vc dar uma olhada em threads.

    att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    Sogi informatique ltée

    terça-feira, 27 de novembro de 2012 14:03
    Moderador
  • Espere um momento.. vc quer retonar ao começo do IF ou ao começo do FOREACH..

    Esta confuso o que vc quer fazer...  isso é um windows service?

    Sugiro vc dar uma olhada em threads.

    att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    Sogi informatique ltée

    Perdão, acho que acabei falando besteira e fazendo confusão. Quero retornar ao ForEach, para que ele percorra TODO o próximo registro. Onde ele pega "nome, cod_dependente,  matricula..." è WindowsForms
    • Editado Alan Naidon terça-feira, 27 de novembro de 2012 16:24
    terça-feira, 27 de novembro de 2012 16:04
  • Aqui está a respostas:

    if((ds.tables.count >0) && (ds.tables[0].Rows.Count>))
    
             {
               foreach(Datarow row in ds.rows)
    
                 {
                   if(Condição)
                       {
                        CONTINUE;  <-- Isso que eu queria fazer
                       }
    
                 }
    
    
    
              }

    Desta forma, usando o Continue; ele pula para o próximo registro (=

    fonte: Poste do nosso companheiro de forum Rudson Kiyoshi

    • Marcado como Resposta Alan Naidon terça-feira, 27 de novembro de 2012 16:35
    terça-feira, 27 de novembro de 2012 16:35