none
Há alguma maneira de pular um valor listado em um foreach? RRS feed

  • Pergunta

  • Pessoal,

    Tenho um pequeno problema aqui que é o seguinte.
    Eu possuo um foreach em meu código e dentro dele outro for , e dentro desse for o valor do que está no meu foreach  é incrementado de acordo com o que acontecer no código la existente.
    Mais ou menos assim:

                            int x = 0;
                            foreach (Regra r in regras)
                            {
                                // Aqui seria a parte que verifica se entra no for 
                                // abaixo ou não.
    
                                for (int i = 0; i < regras.Count; i++)
                                {
                                    // Parte do código que incrementa o meu r.
                                    r.Codigo = regras.ElementAt(x + 1).Codigo;
                                    r.valor = regras.ElementAt(x + 1).Valor;
                                    x++;
                                }
                            }


    Então. Se entrar no for eu adiciono o próximo valor da Lista das Regras ao meu r , até chegar ao final do meu regras .
    E com isso, ao voltar ao meu foreach ele estaria no fim da lista e terminaria o mesmo.

    Ai a pergunta seria a seguinte. Tem como eu incrementar esse foreach ? Porque apesar de eu ir adicionando valores ao meu r quando volto ao foreach ele pula para o próximo valor normal que seria do meu r na lista.

    Obrigado a todos.
    Rodrigo Francisquini
    segunda-feira, 12 de outubro de 2009 21:35

Respostas

  • Rodrigo,

    Eu acho que isso não é possível já que só é possível utilizar o foreach quando temos um array ou coleção que implementa IEnumerable ou IEnumerable<T> e com isso só é possível fazer um loop em uma coleção que não pode ter o seu tamanho alterado, o que não é o seu caso.

    O ideal então seria aninhar dois loops for e não utilizar o foreach.

    Att.

    Ari C. Raimundo
    terça-feira, 13 de outubro de 2009 03:15
    Moderador

Todas as Respostas

  • Caramba Rodrigo,

     que treco misterioso esse que vc esta querendo fazer eu li e li e não entendi rsrsrsrsrs


    bem se vc usar o continue e pula uma tarefa e volta para o próximo passo no foreach

    e o break sai fora.

    Pelo que conheço do foreach, vc não pode incrementa-lo ou remover itens de sua coleção no momento da iteração.

    Se vc quer ter controle sobre ele incrementar e decrementar o passo usa o basicão loop for.


    Abraços!

    Rudson Kiyoshi Souza Carvalho
    segunda-feira, 12 de outubro de 2009 23:19
  • O que eu quero fazer é se acabar a lista no meu for interno, ao sair dele ele vai voltar pro foreach , mas como ja acabou a lista no for interno, no foreach nao terá mais item para ser analizado.
    Rodrigo Francisquini
    terça-feira, 13 de outubro de 2009 01:38
  • Então o que vc está me dizendo, é vai iniciar o foreach, depois entrar no loop for, e quando acabar este loop for vc quer que termine o loop externo foreach?

    Se for isso é só colocar o return; depois  de fechar as chaves do loop for.
    Rudson Kiyoshi Souza Carvalho
    terça-feira, 13 de outubro de 2009 02:02
  • O break vai sair do meu for e o continue vai passar pro proximo item no for sem passar pelos itens.
    Não serve para o meu problema.

    Rodrigo Francisquini
    terça-feira, 13 de outubro de 2009 03:03
  • Rodrigo,

    Eu acho que isso não é possível já que só é possível utilizar o foreach quando temos um array ou coleção que implementa IEnumerable ou IEnumerable<T> e com isso só é possível fazer um loop em uma coleção que não pode ter o seu tamanho alterado, o que não é o seu caso.

    O ideal então seria aninhar dois loops for e não utilizar o foreach.

    Att.

    Ari C. Raimundo
    terça-feira, 13 de outubro de 2009 03:15
    Moderador
  • Caramba Rodrigo,

     que treco misterioso esse que vc esta querendo fazer eu li e li e não entendi rsrsrsrsrs


    bem se vc usar o continue e pula uma tarefa e volta para o próximo passo no foreach

    e o break sai fora.

    Pelo que conheço do foreach, vc não pode incrementa-lo ou remover itens de sua coleção no momento da iteração.

    Se vc quer ter controle sobre ele incrementar e decrementar o passo usa o basicão loop for.


    Abraços!

    Rudson Kiyoshi Souza Carvalho
    Sei que o post faz  3 quase 4 anos hehe mas só vim agradecer hehe... Tava me matando pra saber como fazia para ir para o proximo item do foreach e era só usar Continue *--* Vlw cara !
    terça-feira, 27 de novembro de 2012 16:31