VB.NET: Utilizando Colecções List(Of T)

O namespace System.Collections.Generic contém um conjunto de interfaces e classes que permitem criar colecções muito seguras, simples de utilizar e com muitos bons performances. Estas colecções de Generics são do tipo strongly typed, ou seja, estão disponíveis no intelissense e verificadas pelo compilador, o que evita erros e torna mais fácil a vida ao programador.

Existem diversos tipos de colecções neste ou em outros namespaces (como por exemplo o Dictionary, SortedList, ArrayList, etc) mas um muito utilizado é o List(Of (T)), onde se define o tipo da colecção que se pretende.

Um exemplo simples de utilização:

‘ Cria uma nova lista do tipo “string”

Dim lstEmpreg As New List(Of String)

‘ Adiciona alguns nomes à lista

lstEmpreg.Add(“João Paulo”)

lstEmpreg.Add(“Danillo Leite”)

lstEmpreg.Add(“Luís Nascimento”)

lstEmpreg.Add(“Carlos Sousa”)

lstEmpreg.Add(“Nuno Luís”)

Dim nomePesquisar As String = “Danillo Leite”

‘ Caso o nome a pesquisar seja encontrado

If lstEmpreg.Contains(nomePesquisar) Then

‘ Mostra o nome e o total de nomes na lista

Dim msg As String = “O nome {0} foi encontrado em {1} nome(s)”

Debug.WriteLine(String.Format(msg, nomePesquisar, lstEmpreg.Count))

Else

‘ Mensagem caso não encontre o nome na lista

Debug.WriteLine(“Nome não encontrado na lista!”)

End If

Mas esta colecção pode ser muito mais complexa, sendo necessário guardar vários dados (para além do nome), como por exemplo o número, idade, telefone, etc. Neste caso será criada uma estrutura e guardada na lista.

O método de pesquisa implementa um IEquatable e utiliza um Predicate. Desta forma não é necessário percorrer todos os items da lista para verificar qual o item correspondente.

Um exemplo de utilização

Construção de uma classe simples, sem utilização de propriedades (get/set), que implementa o IEquatable (apenas para demonstração):

Exemplo:

‘ Construção de uma classe simples, sem utilização de

‘ propriedades (get/set) que implementa o IEquatable

Public Class Empregado

Implements IEquatable(Of Empregado)

‘ Campos da classe

Public ID As Byte

Public Nome As String

Public Idade As Byte

Public Function ProcuraEmpregado(ByVal EmpID As Empregado) _

As Boolean Implements System.IEquatable(Of Empregado).Equals

‘ Retorna o ID mas poderá ser utilizado outro campo

‘ para pesquisa, sendo apenas necessário altera para

‘ o campo correctos (ex. Me.Nome = EmpID.Nome)

Return Me.ID = EmpID.ID

End Function

End Class

Utilização da List(Of T) que neste caso adiciona alguns empregados e pesquisa por um campo mostrando os resultados. O campo escolhido para o exemplo foi o ID mas pode-se pesquisar por qualquer campo.

‘ Cria uma nova lista do tipo “Empregado”

Dim lstEmpregados As New List(Of Empregado)

‘ Adiciona empregados à lista

Dim Emp1 As New Empregado

Emp1.ID = 1

Emp1.Nome = “João Paulo”

Emp1.Idade = 28

lstEmpregados.Add(Emp1)

Dim Emp2 As New Empregado

Emp2.ID = 2

Emp2.Nome = “Danillo Leite”

Emp2.Idade = 26

lstEmpregados.Add(Emp2)

Dim Emp3 As New Empregado

Emp3.ID = 3

Emp3.Nome = “Luís Nascimento”

Emp3.Idade = 41

lstEmpregados.Add(Emp3)

‘ Empregado a procurar na lista

Dim Emp As New Empregado

Emp.ID = 2

‘ Guarda o resultado da procura na variável EmpResult

Dim EmpResult As Empregado

‘ Pesquisa na lista de empregados usando um Predicate do tipo empregado

EmpResult = lstEmpregados.Find(New System.Predicate(Of Empregado)(AddressOf Emp.ProcuraEmpregado))

‘ Caso tenha encontrado mostra os resultados ou a mensagem de erro

If EmpResult IsNot Nothing Then

Debug.WriteLine(“Número: “ & EmpResult.ID.ToString)

Debug.WriteLine(“Empregado: “ & EmpResult.Nome.ToString)

Debug.WriteLine(“Idade: “ & EmpResult.Idade.ToString)

Else

Debug.WriteLine(“Número de empregado não encontrado”)

End If

Resultado:

Número: 2

Empregado: Danillo Leite

Idade: 26

As colecções foram completamente revolucionadas com a versão .NET e a sua utilização vem melhorar o que, no passado com o VB6, se fazia apenas com as Collections (muito limitadas) ou com a utilização de arrays.

São bastante simples de utilizar e é recomendável que se verifique qual a colecção que mais se adequa às necessidades no programa.

PS: Como sempre, qualquer dúvida, comentário ou correcção ao artigo é sempre bem vinda!

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s