Neste artigo, vou mostrar diferentes maneiras de criar uma lista de objetos na 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, 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 quatro 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/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 representa os números 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 e 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!