none
Foreach para item de coleção RRS feed

  • Pergunta

  • Boa tarde,

    Eu tenho uma coleção parecida com o seguinte exemplo:

    public class Teste
    {
         public string Teste1;
         public long Teste2;
    }

    Seria possível fazer um foreach com os itens desta Classe? (No caso o foreach para Teste1 e Teste2)

    Se tiver dúvida por favor avisem.

    Obrigado pela atenção,

    André Ishihara

    sexta-feira, 22 de maio de 2015 17:15

Respostas

  •   public class Cliente
        {
            public int Teste1;
            public string Teste2;

            public int Id { get; set; }
            public string Nome { get; set; }
        }

                Cliente cliente = new Cliente();
                var fields = cliente.GetType().GetFields(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.DeclaredOnly);

                foreach (var f in fields)
                {
                    switch (f.FieldType.FullName)
                    {
                        case "System.String":
                            {
                                string valor = (string)f.GetValue(cliente);
                                break;
                            }
                        case "System.Int32":
                            {
                                int valor = (int)f.GetValue(cliente);
                                break;
                            }
                    }

                }

            
    • Marcado como Resposta André Ishihara quinta-feira, 28 de maio de 2015 18:49
    sexta-feira, 22 de maio de 2015 18:59
  • sim... desta forma:

    var Fields = itemDocumento.GetType().GetProperties();
    foreach(var Field in Fields)
    {
    object value=itemDocumento.GetType().GetProperty(Field.Name).GetValue(itemDocumento, null);   
    }
    
    
    
    

    aqui esta a documentaçao do metodo:

    https://msdn.microsoft.com/en-us/library/b05d59ty%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

    att


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

    segunda-feira, 25 de maio de 2015 20:16
    Moderador

Todas as Respostas

  • Não ficou claro, você tem uma lista de objetos Teste, e quer ler os atributos Teste1 e Teste2 de cada elemento?

    List<Teste> lst = new List<Teste>();
    lst.Add(new Teste("1",1));
    lst.Add(new Teste("2",2));
    lst.Add(new Teste("3",3));
    
    foreach(Teste t in lst)
    {
       Console.WriteLine(t.Teste1);
       Console.WriteLine(t.Teste2);
    }

     

    Att. Andre de Mattos Ferraz

    sexta-feira, 22 de maio de 2015 17:18
  •   public class Cliente
        {
            public int Teste1;
            public string Teste2;

            public int Id { get; set; }
            public string Nome { get; set; }
        }

                Cliente cliente = new Cliente();
                var fields = cliente.GetType().GetFields(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.DeclaredOnly);

                foreach (var f in fields)
                {
                    switch (f.FieldType.FullName)
                    {
                        case "System.String":
                            {
                                string valor = (string)f.GetValue(cliente);
                                break;
                            }
                        case "System.Int32":
                            {
                                int valor = (int)f.GetValue(cliente);
                                break;
                            }
                    }

                }

            
    • Marcado como Resposta André Ishihara quinta-feira, 28 de maio de 2015 18:49
    sexta-feira, 22 de maio de 2015 18:59
  • Então Cesar é algo parecido com isso mas queria pegar o nome dos campos para utilizar em um where de uma List.

    Algo neste sentido:

    List<Pedido> listaDocumentos = //Processo para preencher a lista Pedido
    List<Configuracao> posConfiguracao = //Processo para preencher a lista Configuracao
    foreach (Pedido itemDocumento in listaDocumentos)
    {
        //Processo para a listas de nome de campo
        foreach(var a in //lista nomes de campo)
        {
            Configuracao itemConfiguracao   posConfiguracao.Where(p => p.NomeCampo = a)
            //Processos seguintes.
        }
    }

    É possível isso ou devo pensar de outra forma?

    segunda-feira, 25 de maio de 2015 13:27
  • Boa tarde,

    Depois de uma pesquisa consegui chegar nesta solução:

    var Fields = itemDocumento.GetType().GetProperties();
    foreach(var Field in Fields)
    {
       Field.Name //Nome do Campo
    }

    Tem como pegar o valor deste campo também desta forma?

    segunda-feira, 25 de maio de 2015 20:04
  • sim... desta forma:

    var Fields = itemDocumento.GetType().GetProperties();
    foreach(var Field in Fields)
    {
    object value=itemDocumento.GetType().GetProperty(Field.Name).GetValue(itemDocumento, null);   
    }
    
    
    
    

    aqui esta a documentaçao do metodo:

    https://msdn.microsoft.com/en-us/library/b05d59ty%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

    att


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

    segunda-feira, 25 de maio de 2015 20:16
    Moderador
  • Boa tarde,

    Obrigado William e Cesar.

    quinta-feira, 28 de maio de 2015 18:49