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!





