C# - Diferentes maneira de criar uma lista de objetos


 Neste artigo vou mostrar diferentes maneiras de criar uma lista de objetos na linguagem C#.

Neste artigo veremos como criar uma lista de objetos de diferentes maneiras usando a linguagem C#.

Mãos à obra...

Recursos usados:

Criando o projeto no VS 2017 Community

Abra o VS 2017 Community e crie um novo projeto do tipo Console App com o nome CSharp_ListaObjetos:

Com o projeto criado vamos criar uma pasta chamada Services onde iremos criar a classe Livro e os serviços que vão fornecer a lista de objetos.

No menu Project clique em New Folder e informe Services.

A seguir clique com o botão direito sobre a pasta Services e a seguir clique em Add Class e informe o nome Livro.

Inclua então o código abaixo nesta classe:

    public class Livro
    {
        public int LivroId { get; set;}
        public string Titulo { get; set; } = string.Empty;
        public string Autor { get; set; } = string.Empty;
        public string ISBN { get; set; } = string.Empty;

        public Livro()
        { }

        public Livro(int id, string titulo,string autor, string isbn)
        {
           LivroId = id;
           Titulo = titulo;
           Autor = autor;
           ISBN = isbn;
        }
    }

A classe Livro possui 4 propriedades e dois construtores.

Agora vamos iniciar a criação das listas de objetos da classe Livro iniciando com a sintaxe mais básica.

1- Antes da versão 3.0 da linguagem geralmente criávamos uma lista de objetos usando o código abaixo:

using System.Collections.Generic;
namespace CSharp_ListaObjetos.Services
{
    public class LivrosService1
    {
       public List<Livro> GetLivros()
       {
            var listaLivros = new List<Livro>();
            // Inicializa o objeto e o inclui na coleção
            var livro1 = new Livro(1,"ASP, ADO e Banco de dados na web","Macoratti","8585943963");
            listaLivros.Add(livro1);
            var livro2 = new Livro(2,"ASP - Aprenda Rápido", "Macoratti", "8585845214");
            listaLivros.Add(livro2);
            return listaLivros;
        }
    }
}  

Uma variação do código acima seria usar o método AddRange que adiciona os elementos da coleção ao final da lista:

using System.Collections.Generic;
namespace CSharp_ListaObjetos.Services
{
    public class LivrosService1
    {
       public static List<Livro> GetLivros()
       {
            var listaLivros = new List<Livro>();
            listaLivros.AddRange(new[] {
                new Livro(1,"ASP, ADO e Banco de dados na web","Macoratti","8585943963"),
                new Livro(2,"ASP - Aprenda Rápido", "Macoratti", "8585845214")
            });
            return listaLivros;
        }
    }
}  

2- Com o lançamento da versão 3.0 da linguagem tivemos muitas melhorias incluindo o recurso Collection Initializers, ou inicializadores de coleção, que usamos a seguir:

using System.Collections.Generic;

namespace CSharp_ListaObjetos.Services
{
    class LivrosService2
    {
        public static List<Livro> GetLivros()
        {
            var listaLivros = new List<Livro>()
            {
                new Livro { LivroId=1,Titulo="ASP, ADO e Banco de dados na web",Autor="Macoratti", ISBN="8585943963"},
                new Livro { LivroId=2,Titulo="ASP - Aprenda Rápido",Autor="Macoratti", ISBN="8585845214"}

            };
            return listaLivros;
        }
    }
}

O namespace System.Linq possui a classe Enumerable que contém métodos estáticos que podemos usar para criar uma lista de objetos.

O método Enumerable.Repeat permite gerar uma sequência que contém um valor repetido.

A sintaxe é  :

public static IEnumerable<TResult> Repeat<TResult>(TResult element, int count)
onde :
TResult é o elemento a ser repetido e count o número de vezes a repetir o elemento.
Ele é mais indicado para inicializar uma lista de objetos com múltiplas cópias do mesmo elemento.
Para o nosso exemplo podemos fazer assim:
using System.Collections.Generic;
namespace CSharp_ListaObjetos.Services
{
    class LivrosService2
    {
        public static List<Livro> GetLivros()
        {
             var listaLivros = Enumerable.Repeat(new Livro(), 2).ToList();
             return listaLivros;
        }
    }
}
Espiando o objeto listaLivros veremos os dois objetos Livro criados :
Um outro método da mesma classe é Enumerable.Range que pode gerar uma coleção em um intervalo especificado:

A sintaxe é  :

public static IEnumerable<int> Range(int start,int count)
onde :
start é o valor do primeiro inteiro da sequência e count o número inteiros a serem gerados.
Usando uma variação deste método para o nosso exemplo temos:
using System.Collections.Generic;
namespace CSharp_ListaObjetos.Services
{
    class LivrosService2
    {
        public static List<Livro> GetLivros()
        {
             var listaLivros = Enumerable.Range(1, 2).Select(i => new Livro()).ToList();
             return listaLivros;
        }
    }
}
O resultado é o mesmo obtido no método Enumerable.Repeat.
Para concluir, para acessar a lista de objetos criada podemos iterar sobre a coleção usando um foreach:
using CSharp_ListaObjetos.Services;
using System;
using System.Collections.Generic;
namespace CSharp_ListaObjetos
{
    class Program
    {
        static void Main(string[] args)
        {
            List<Livro> lista = LivrosService1.GetLivros();
            lista.ForEach(lv => Console.WriteLine(lv.Titulo+"\t"+ lv.Autor));
            Console.ReadKey();
        }
    }
}
 

E estamos conversados...

"Portanto, agora nenhuma condenação há para os que estão em Cristo Jesus, que não andam segundo a carne, mas segundo o Espírito."
Romanos 8:1

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Referências:


José Carlos Macoratti