Partilhar via


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

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

Por exemplo, considere um aplicativo que deve ler um grande arquivo de texto e o retorno de cada linha do arquivo que corresponde aos critérios de pesquisa específico. O aplicativo usa umaconsulta do LINQpara retornar linhas do arquivo que correspondam aos critérios especificados. Para consulta o conteúdo do arquivo, usando umaconsultado LINQ, o aplicativo foi possível carregar o conteúdo do arquivo em uma matriz ou uma coleção. No entanto, carregar o arquivo inteiro em uma matriz ou coleção consumiria muito mais memória do que é necessário. Aconsulta do LINQpoderia em vez disso, consulta o conteúdo do arquivo usando um enumerable classe, 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 fonte 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 fonte . 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 ler um arquivo de texto , uma linha em uma hora.

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 do Visual Studio.

Criando a classe Enumerable

Para criar oprojetode enumerable classe

  1. No Visual Basicdiante do Arquivo menu, aponte para Novo e, em seguida, clique em projeto.

  2. No Novo projeto na caixa de 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. The new project is displayed.

  3. Em Solution Explorer, à direita de-, clique no arquivo Class1. vb e clique em Renomear. Renomear 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. À direita, clique no projetode StreamReaderEnumerable de-, aponte para Adicionare em seguida, clique em Novo Item. Select the Class template. No Nome , digite StreamReaderEnumerator.vb e clique em OK.

A primeira classe deste projeto é a classe enumerable e implementará o IEnumerable(Of String) interface. Essa interface de 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 de enumerable lerá linhas de um arquivo de texto uma linha por vez. Adicionar o seguinte código à classe para expor um construtor público que toma um caminho de arquivo como um parâmetrode entrada.

  4. A implementação da GetEnumeratorométodo da IEnumerable(Of String)interface retornará uma nova instância da StreamReaderEnumeratorclasse. A implementação da GetEnumeratorométodo da IEnumerableinterface pode ser feita Private, porque você precisa 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. Aclasse do enumeradorabre o arquivo de texto e executa o arquivo de i/O para ler as linhas do arquivo. Adicionar o seguinte código à classe para expor um construtor público que toma um caminho de arquivo como um parâmetro de entrada e em aberto 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 Currentapropriedade da IEnumeratorinterface pode ser feita Private, porque você precisa 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 MoveNextométodo da IEnumeratorinterface navega para o próximo item no arquivo de texto e atualiza o valor retornado pelo Currentpropriedade. Se houver mais itens para ler, o MoveNext método retorna False; Caso contrário, o MoveNext método retorna True. Add the following code to the MoveNext method.

  6. O Resetométodo da IEnumeratorinterface direciona o iterador para apontar para o início do arquivo de texto e limpa o valor atual do item . Add the following code to the Reset method.

  7. O Disposeométodo da IEnumeratorinterface garante que todos os recursos não gerenciados são liberados antes que o iterador é destruído. O identificador de arquivo usado pelo StreamReaderdeobjeto é um recurso de 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 Disposeométodo com o código a seguir.

Usando o iterador de Exemplo

Você pode usar uma classe de enumerable em seu código, juntamente com as estruturas de controle que exigem um objeto que implementa IEnumerable, como um For Nextloop ou umaconsultado LINQ. A exemplo a seguir mostra a StreamReaderEnumerable em umaconsultado 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

Instrução For Each...Next (Visual Basic)

Conceitos

Introdução ao LINQ no Visual Basic

Estruturas de loop (Visual Basic)

Outros recursos

Fluxo de controle no Visual Basic