Compartilhar via


Passo a passo: Implementando o IEnumerable(Of T) em Visual Basic

O IEnumerable<T> interface é implementada por classes que podem retornar uma seqüência de um item de valores ao mesmo tempo.A vantagem de retornar o item de dados, um por vez é que você não precisará carregar o conjunto completo de dados na memória para trabalhar com ela.Você só precisará usar memória suficiente para carregar um único item de dados.Classes que implementam o IEnumerable(T) interface pode ser usada com For Each loops ou consultas LINQ.

Por exemplo, considere um aplicativo que deve ler um arquivo de texto grande e o retorno de cada linha do arquivo que correspondam aos critérios de pesquisa específico.O aplicativo usa uma consulta LINQ para retornar linhas do arquivo que correspondam aos critérios especificados.Para consultar o conteúdo do arquivo, usando uma consulta LINQ, o aplicativo foi possível carregar o conteúdo do arquivo em uma matriz ou uma coleção.No entanto, carregando o arquivo inteiro em uma matriz ou coleção consumiria muito mais memória do que o necessário.A consulta do LINQ em vez disso, foi possível consultar o conteúdo do arquivo usando uma classe enumerable, retornando somente os valores que correspondem aos critérios de pesquisa.Consultas que retornam apenas alguns valores correspondentes consumiria muito menos memória.

Você pode criar uma classe que implementa o IEnumerable<T> interface para expor os dados de origem como dados enumerable.Sua classe que implementa o IEnumerable(T) interface exigirá a outra classe que implementa o IEnumerator<T> interface para iterar por meio de dados de origem.Essas duas classes permitem que você retornar os itens de dados seqüencialmente, como um tipo específico.

Esta explicação passo a passo, você irá criar uma classe que implementa o IEnumerable(Of String) interface e uma classe que implementa o IEnumerator(Of String) interface para ler uma texto arquivo uma linha por vez.

ObservaçãoObservação

Seu computador pode mostrar nomes ou locais diferentes para alguns dos elementos da interface do usuário do Visual Studio nas instruções a seguir. A edição do Visual Studio que você possui e as configurações que você usa determinam esses elementos. Para obter mais informações, consulte Configurações de Visual Studio.

Criando a classe Enumerable

Para criar o projeto da classe enumerable

  1. Em Visual Basic, no menu File, aponte para New e então clique em Project.

  2. No Novo projeto na caixa a Tipos de projeto painel, certifique-se de que Windows está selecionada.Selecione Biblioteca de classe na modelos de painel.No nome , digite StreamReaderEnumerablee, em seguida, clique em OK.O novo projeto é exibido.

  3. Em Solution Explorer, o botão direito do mouse no arquivo Class1. vb e clique em Renomear.Renomeie o arquivo para StreamReaderEnumerable.vb e pressione ENTER.Renomear o arquivo também renomear a classe StreamReaderEnumerable.Essa classe irá implementar a IEnumerable(Of String) interface.

  4. Clique com o botão direito no projeto StreamReaderEnumerable, aponte para Adde, em seguida, clique em Novo Item.Selecione o modelo Classe.No nome , digite StreamReaderEnumerator.vb e clique em OK.

A primeira classe neste projeto é a classe enumerable e implementará o IEnumerable(Of String) interface.Essa interface genérica implementa o IEnumerable interface e garante que os consumidores dessa classe podem acessar os valores digitados como String.

Para adicionar o código para implementar IEnumerable

  1. Abra o arquivo StreamReaderEnumerable.vb.

  2. Na linha após Public Class StreamReaderEnumerable, digite o seguinte e pressione ENTER.

    Visual Basicpreenche automaticamente a classe com os membros que são necessários para o IEnumerable(Of String) interface.

  3. Essa classe enumerable lê linhas de uma linha de um arquivo texto ao mesmo tempo.Adicione o seguinte código à classe para expor um construtor público que toma um caminho de arquivo como um parâmetro de entrada.

  4. A implementação da GetEnumerator método da IEnumerable(Of String) interface irá retornar uma nova instância da StreamReaderEnumerator classe.A implementação da GetEnumerator método da IEnumerable interface pode ser feita Private, porque você tem que expor somente os membros da IEnumerable(Of String) interface.Substitua o código que Visual Basic gerado para o GetEnumerator métodos com o código a seguir.

Para adicionar o código para implementar IEnumerator

  1. Abra o arquivo StreamReaderEnumerator.vb.

  2. Na linha após Public Class StreamReaderEnumerator, digite o seguinte e pressione ENTER.

    Visual Basicpreenche automaticamente a classe com os membros que são necessários para o IEnumerator(Of String) interface.

  3. A classe do enumerador abre o arquivo de texto e executa o arquivo de i/O para ler as linhas do arquivo.Adicione o seguinte código à classe para expor um construtor público que toma um caminho de arquivo como um parâmetro de entrada e abra o arquivo de texto para leitura.

  4. O Current propriedades para ambos os IEnumerator(Of String) e IEnumerator interfaces retornam o item atual do arquivo de texto como um String.A implementação da Current propriedade da IEnumerator interface pode ser feita Private, porque você tem que expor somente os membros da IEnumerator(Of String) interface.Substitua o código que Visual Basic gerado para o Current propriedades com o código a seguir.

  5. O MoveNext método da IEnumerator interface navega para o próximo item no arquivo de texto e atualiza o valor retornado pelo Current propriedade.Se houver mais itens para ler, o MoveNext método retorna False; Caso contrário, o MoveNext método retorna True.Adicione o seguinte código ao método MoveNext.

  6. O Reset método da IEnumerator interface direciona o iterador para apontar para o início do arquivo de texto e limpa o valor do item atual.Adicione o seguinte código ao método Reset.

  7. O Dispose método da IEnumerator interface garante que todos os recursos não gerenciados são liberados antes que o iterador é destruído.O identificador de arquivo usado pelo StreamReader objeto é um recurso não gerenciado e deve ser fechado antes que a instância do iterador é destruída.Substitua o código que Visual Basic gerado para o Dispose método com o código a seguir.

Usando o iterador de exemplo

Você pode usar uma classe enumerable em seu código juntamente com as estruturas de controle que exigem um objeto que implementa IEnumerable, como um For Next loop ou uma consulta LINQ.A exemplo a seguir mostra a StreamReaderEnumerable em uma consulta LINQ.

Dim adminRequests = 
    From line In New StreamReaderEnumerable("..\..\log.txt")
    Where line.Contains("admin.aspx 401")

Dim results = adminRequests.ToList()

Consulte também

Referência

Para cada...Próxima instrução (Visual Basic)

Conceitos

Introdução ao LINQ em Visual Basic

Estruturas de loop (Visual Basic)

Outros recursos

Controle de fluxo em Visual Basic