Sdílet prostřednictvím


Návod: Implementace IEnumerable(Of T) v jazyce Visual Basic

IEnumerable Rozhraní je implementováno pomocí tříd, které můžete vrátit posloupnost hodnot jednu položku najednou.Výhodou vždy vrací data jedné položky je, že není nutné úplnou sadu dat načíst do paměti pro práci s ním.Máte pouze jednu položku načíst z dat pomocí dostatek paměti.Tato implementace třídy IEnumerable(T) rozhraní lze použít s For Each smyčky nebo LINQ dotazy.

Zvažte například aplikaci, která musí číst velký textový soubor a vrátit každý řádek ze souboru, který odpovídá zejména vyhledávací kritéria.Aplikace používá LINQ dotaz vrátit řádky ze souboru, která splňují zadaná kritéria.Chcete-li odeslat dotaz na obsah souboru pomocí LINQ dotazu, může aplikace načíst obsah souboru do pole nebo kolekce.Načtení celého souboru do pole nebo kolekce by spotřebovávají mnohem více paměti, než je požadováno.LINQ dotazu nelze obsah souboru dotazu místo pomocí agregující třída vrací pouze hodnoty, které odpovídají kritériím hledání.Dotazy, které vracejí pouze několik odpovídající hodnoty by spotřebovat daleko méně paměti.

Můžete vytvořit třídu, která implementuje IEnumerable rozhraní zdrojová data jako vyčíslitelné.Vaše třída, která implementuje IEnumerable(T) vyžaduje jiné třídy, která implementuje rozhraní IEnumerator rozhraní iterovat zdrojová data.Tyto dvě třídy umožňují vrátit položky dat postupně určitého typu.

V tomto návodu se vytvořit třídu, která implementuje IEnumerable(Of String) rozhraní a třídy, která implementuje IEnumerator(Of String) rozhraní čtení vždy jeden řádek textového souboru.

[!POZNÁMKA]

Na vašem počítači se můžou v následujících pokynech zobrazovat jiné názvy nebo umístění některých prvků uživatelského rozhraní Visual Studia. Tyto prvky jsou určeny edicí sady Visual Studio a použitým nastavením. Další informace najdete v tématu Přizpůsobení nastavení pro vývoj v sadě Visual Studio.

Vytvoření třídy agregující

Vytvořte projekt agregující třídy

  1. V Visual Basic, soubor nabídce přejděte na Nový a klepněte na tlačítko projektu.

  2. V Nový projekt v dialogovém okně pole Typy projektů podokna, ujistěte se, že Windows je zaškrtnuto.Vyberte Knihovna tříd v šablony podokně.V název zadejte StreamReaderEnumerablea klepněte na tlačítko OK.Zobrazí se nový projekt.

  3. V Aplikaci Solution Explorer, klepněte pravým tlačítkem myši na soubor Class1.vb a klepněte na tlačítko Přejmenovat.Přejmenujte soubor na StreamReaderEnumerable.vb a stiskněte klávesu ENTER.Přejmenování souboru bude také přejmenovat třídy na StreamReaderEnumerable.Tato třída bude provádět IEnumerable(Of String) rozhraní.

  4. Pravým tlačítkem myši na projekt StreamReaderEnumerable, přejděte na Přidata klepněte na tlačítko Nové položky.Vyberte třídy šablony.V název zadejte StreamReaderEnumerator.vb a na OK.

První třída v tomto projektu je agregující třídy a provede IEnumerable(Of String) rozhraní.Implementuje obecné rozhraní IEnumerable rozhraní a záruky spotřebitele této třídy přístup hodnoty zadané jako String.

Přidat kód, který chcete implementovat rozhraní IEnumerable

  1. Otevřete soubor StreamReaderEnumerable.vb.

  2. Na řádku po Public Class StreamReaderEnumerable, zadejte následující příkaz a stiskněte klávesu ENTER.

    Visual Basicautomaticky naplní třídy s členy, které jsou vyžadovány IEnumerable(Of String) rozhraní.

  3. Tato třída agregující bude číst řádky z jednoho řádku textu souboru současně.Přidejte následující kód třídy vystavit veřejný konstruktor, který trvá cesta souboru jako vstupní parametr.

  4. Implementace GetEnumerator metodu IEnumerable(Of String) vrací novou instanci rozhraní StreamReaderEnumerator třídy.Provádění GetEnumerator metodu IEnumerable lze použít rozhraní Private, protože je nutné vystavit pouze členové IEnumerable(Of String) rozhraní.Nahradit kód, Visual Basic pro GetEnumerator metod s následujícím kódem.

Přidání kódu k provedení IEnumerator

  1. Otevřete soubor StreamReaderEnumerator.vb.

  2. Na řádku po Public Class StreamReaderEnumerator, zadejte následující příkaz a stiskněte klávesu ENTER.

    Visual Basicautomaticky naplní třídy s členy, které jsou vyžadovány IEnumerator(Of String) rozhraní.

  3. Třída enumerator otevře textový soubor a provádí vstupně číst řádky ze souboru.Přidejte následující kód třídy vystavit veřejný konstruktor, který trvá cesta souboru jako vstupní parametr a otevřete textový soubor pro čtení.

  4. Current Pro obě vlastnosti IEnumerator(Of String) a IEnumerator rozhraní z textového souboru jako aktuální položky vrátit String.Provádění Current vlastnost IEnumerator lze použít rozhraní Private, protože mají pouze členové vystavit IEnumerator(Of String) rozhraní.Nahradit kód, Visual Basic pro Current vlastnosti s následujícím kódem.

  5. MoveNext Metodu IEnumerator rozhraní přejde na další položku v textovém souboru a aktualizuje vrácenou hodnotu Current vlastnost.Pokud nejsou žádné další položky ke čtení, MoveNext metoda vrátí False; jinak MoveNext metoda vrátí True.Do metody MoveNext přidejte následující kód:

  6. Reset Metodu IEnumerator rozhraní nasměruje iterační přejděte na začátku souboru text a vymaže aktuální hodnotu zboží.Do metody Reset přidejte následující kód:

  7. Dispose Metodu IEnumerator rozhraní zaručuje všechny nespravované prostředky musí být vydány před iterace zničen.Popisovač souboru, který je používán StreamReader objekt nespravované prostředky a musí být uzavřena před instance iterační zničen.Nahradit kód, Visual Basic pro Dispose metodou s následující kód.

Použití iterační vzorku

Vyčíslitelné třídy lze použít v kódu spolu s řídícími strukturami, které vyžadují objekt, který implementuje IEnumerable, jako For Next smyčky nebo LINQ dotazu.Následující příklad ukazuje StreamReaderEnumerable v LINQ dotazu.

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

Dim results = adminRequests.ToList()

Viz také

Referenční dokumentace

For Each...Next – příkaz (Visual Basic)

Koncepty

Představení technologie LINQ v jazyce Visual Basic

Struktury smyčky (Visual Basic)

Další zdroje

Tok řízení v jazyce Visual Basic