Diferença entre ICollection, IList e List?
ICollection, IList e List são interfaces na linguagem de programação C# que são utilizadas para trabalhar com coleções de elementos. Cada uma dessas interfaces possui suas próprias características e funcionalidades. Vou explicar a diferença entre eles:
- ICollection: é a mais genérica das três interfaces e define um conjunto de operações básicas de coleção. Ela fornece métodos para adicionar, remover e verificar a existência de um elemento na coleção. No entanto, não permite acesso direto aos elementos por índice.
Exemplo:
ICollection<string> collection = new List<string>();
collection.Add("elemento1");
collection.Add("elemento2");
collection.Remove("elemento1");
Console.WriteLine(collection.Contains("elemento2")); // retorna True
- IList: é uma interface que estende ICollection adicionando a funcionalidade de acesso aos elementos por índice. Além das operações disponíveis em ICollection, IList permite inserção em uma posição específica, remoção de um elemento em um índice específico, etc.
Exemplo:
IList<string> list = new List<string>();
list.Add("elemento1");
list.Insert(0, "elemento2");
list.RemoveAt(1);
Console.WriteLine(list[0]); // retorna "elemento2"
Console.WriteLine(list.Count); // retorna 1
- List: é uma classe que implementa a interface IList. É uma coleção de elementos que permite armazenar objetos em uma sequência indexada. Além das funcionalidades fornecidas por IList, como adicionar, remover e acessar elementos por índice, List também possui outros métodos e propriedades úteis, como métodos de pesquisa e classificação.
Exemplo:
List<int> numbers = new List<int>();
numbers.Add(10);
numbers.Add(20);
numbers.Add(30);
numbers.Sort();
Console.WriteLine(numbers[0]); // retorna 10
Console.WriteLine(numbers.Count); // retorna 3
Em resumo, ICollection fornece as operações básicas de uma coleção, IList estende ICollection para fornecer acesso por índice e List é uma classe que implementa a interface IList e oferece funcionalidades adicionais. A escolha entre eles depende do tipo de operações e funcionalidades específicas que você precisa para sua aplicação.