Aracılığıyla paylaş


İzlenecek yol: Visual Basic içinde IEnumerable(Of T) uygulama

IEnumerable<T> Arabirimi, bir dizi değerleri tek bir öğe bir zaman dönebilirsiniz sınıfları tarafından gerçekleştirilir.Bir defada bir veri öğesi dönmeden avantajı, eksiksiz bir veri kümesi ile çalışmak için belleğe yüklemek gerekmez olmasıdır.Yalnızca tek bir öğe verilerini yüklemek için yeterli bellek kullanmak zorunda.Sınıfları saðlamanýzý IEnumerable(T) arabirimi ile kullanılabilecek For Each döngüleri veya LINQ sorguları.

Örneğin, büyük metin dosyasını okuyun ve her satır belirli arama ölçütleri ile eşleşen dosyadan geri dönmek gerekir bir uygulama göz önünde bulundurun.Uygulama dosyasından belirtilen ölçütlere uyan satırları dönmek için LINQ sorgu kullanır.LINQ sorgusu kullanarak dosyanın içeriğini sorgulamak için uygulama dosyasının içeriğini bir dizi ya da bir koleksiyon yükleyebildi.Ancak, dosyanın tamamını bir dizi veya derlemesi yüklenirken gerekenden çok daha fazla bellek kullanılmasına neden.LINQ yerine dosya içeriğini arama ölçütüyle eşleşen değerleri döndürme sýralanabilir sýnýfýn kullanarak sorgu.Yalnızca birkaç döndüren sorgular eşleşen değerler daha az bellek tüketir.

Uygulayan bir sınıf oluşturabilirsiniz IEnumerable<T> kaynak verisi olarak sýralanabilir verileri göstermek için arabirim.Sınıfınızın uygulayan IEnumerable(T) arabirimini uygulayan başka bir sınıf gereksinim IEnumerator<T> arabirimi kaynak veri yineleme yapmak için.Bu iki sınıf veri öğelerinin belirli bir tür olarak ardışık olarak dönmek etkinleştirin.

Bu izlenecek yolda, uygulayan bir sınıf oluşturur IEnumerable(Of String) arabirimi ve uygulayan bir sınıf IEnumerator(Of String) bir kerede bir metin dosyasına bir satır okuma arabirimi.

[!NOT]

Bilgisayarınızda, aşağıdaki yönergelerde yer alan Visual Studio kullanıcı arabirimi öğelerinden bazılarının adı veya konumu farklı gösterilebilir. Bu öğeleri bilgisayarınızdaki Visual Studio sürümü ve kullandığınız ayarlar belirler. Daha fazla bilgi için bkz: Visual Studio ayarları.

Sýralanabilir sýnýfýn oluşturma

Sýralanabilir sýnýfýn proje oluşturmak için

  1. De Visual Basic, Dosya menüsü, YeniProje.

  2. İçinde Yeni bir proje iletişim kutusunda Proje türleri bölmesi, emin olun Windows seçilir.Seçin Class Library , şablonları bölmesi.İçinde ad kutusuna yazın StreamReaderEnumerableve ardından Tamam.Yeni proje görüntülenir.

  3. İçinde Solution Explorer, Class1.vb dosyasını sağ tıklatın ve tıklatın yeniden.Dosyayı yeniden adlandırma StreamReaderEnumerable.vb ve enter tuşuna basın.Dosyayı yeniden adlandırmayı de adını değiştirecek sınıfına StreamReaderEnumerable.Bu sınıf gerçekleştireceksiniz IEnumerable(Of String) arabirimi.

  4. StreamReaderEnumerable proje sağ tıklatın, üzerine Ekleve ardından New Item.Seçin sınıfı şablonu.İçinde ad kutusuna yazın StreamReaderEnumerator.vb 'ı tıklatın ve Tamam.

Bu proje ilk sınıfında sýralanabilir sınıftır ve gerçekleştireceksiniz IEnumerable(Of String) arabirimi.Bu genel arabirimini uygulayan IEnumerable arabirimi ve bu sınıfın tüketiciler olarak yazılan değerlerine erişebilirsiniz garanti String.

IEnumerable uygulamak için kodu eklemek için

  1. StreamReaderEnumerable.vb dosyasını açın.

  2. Sonra satırdaki Public Class StreamReaderEnumerable, aşağıdaki komutu yazın ve enter tuşuna basın.

    Visual Basicgerekli olan üyelere sahip sınıf otomatik olarak dolduran IEnumerable(Of String) arabirimi.

  3. Bu sýralanabilir sýnýfýn bir defada bir metin dosyası bir satırından satırları okuyun.Sınıf bir girdi parametresi olarak bir dosya yolu götüren bir public kurucu göstermek için aşağıdaki kodu ekleyin.

  4. Uygulamanız, GetEnumerator yöntemi, IEnumerable(Of String) arabirimi geri dönün, yeni bir örneğini StreamReaderEnumerator sınıfı.Uygulaması, GetEnumerator yöntemi, IEnumerable arabirimi atölyeye Private, yalnızca üyeleri tarafından ele geçirilmesini olduğundan IEnumerable(Of String) arabirimi.Kod değiştirme, Visual Basic için üretilen GetEnumerator yöntemleri yerine aşağıdaki kodu.

IEnumerator uygulamak için kodu eklemek için

  1. StreamReaderEnumerator.vb dosyasını açın.

  2. Sonra satırdaki Public Class StreamReaderEnumerator, aşağıdaki komutu yazın ve enter tuşuna basın.

    Visual Basicgerekli olan üyelere sahip sınıf otomatik olarak dolduran IEnumerator(Of String) arabirimi.

  3. Numaralayıcı sınıfı, metin dosyasını açar ve dosya g/Ç satırlar dosyadan okumak için gerçekleştirir.Sınıf bir girdi parametresi olarak bir dosya yolu götüren bir public kurucu ve metin dosyasını okumak için şu kodu ekleyin.

  4. Current Özellikler her ikisi için de IEnumerator(Of String) ve IEnumerator arabirimleri metin dosyasından geçerli öğeyi döndürmek bir String.Uygulaması, Current özelliği IEnumerator arabirimi atölyeye Private, yalnızca üyeleri tarafından ele geçirilmesini olduğundan IEnumerator(Of String) arabirimi.Kod değiştirme, Visual Basic için üretilen Current özellikleri aşağıdaki kod ile.

  5. MoveNext Yöntemi, IEnumerator arabirimi metin dosyasındaki bir sonraki öğeye gider ve tarafından döndürülen değeri güncelleştirmeleri Current özelliği.Okumak için daha fazla öğe varsa MoveNext yöntemi döndürür False; Aksi halde MoveNext yöntemi döndürür True.Aşağıdaki kodu MoveNext yöntemine ekleyin.

  6. Reset Yöntemi, IEnumerator arabirimi Yineleyici metin dosyasının başlangıcını işaret edecek şekilde yönlendirir ve geçerli öğe değerini siler.Aşağıdaki kodu Reset yöntemine ekleyin.

  7. Dispose Yöntemi, IEnumerator arabirimi garanti Yineleyici edilmeden yönetilmeyen tüm kaynaklar serbest bırakılır.Tarafından kullanılan dosya tanıtıcısı StreamReader nesnesi bir yönetilmeyen kaynağın ve Yineleyici örneği edilmeden kapatılmalıdır.Kod değiştirme, Visual Basic için üretilen Dispose yöntemi şu kodu ile.

Örnek yineleyici kullanarak

Sýralanabilir sýnýfýn kodunuzda uygulayan bir nesne gerektiren denetim yapıları ile birlikte kullanabileceğiniz IEnumerable, gibi bir For Next döngü ya da bir LINQ sorgusu.Aşağıdaki örnekte gösterildiği StreamReaderEnumerable LINQ sorgu.

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

Dim results = adminRequests.ToList()

Ayrıca bkz.

Başvuru

Her için...Sonraki ifade (Visual Basic)

Kavramlar

LINQ Visual Basic giriş

Döngü yapıları (Visual Basic)

Diğer Kaynaklar

Visual Basic'te akış denetimi