الإرشادات التفصيلية: تطبيق IEnumerable ا (Of T) في Visual Basic

واجهة IEnumerable<T> يتم تطبيقها بواسطة فئات التي يمكن أن ترجع تسلسل قيم عنصر واحد في المرة الواحدة. مزايا إعادة البيانات عنصر واحد في كل مرة هو انه لا يلزم تحميل المجموعة الكاملة من البيانات في الذاكرة للعمل معها. عليك استخدام ذاكرة كافية لتحميل عنصر واحدة فقط من البيانات. الـفئات التي تقوم بتنفيذ واجهة IEnumerable(T) يمكن استخدامها مع For Each الحلقات أو استعلامات LINQ.

على سبيل المثال، ضع في الاعتبار التطبيق الذي يجب أن يقرأ ملف نصي كبير و ارجاع كل خط من الملف الذي يتطابق مع خصائص بحث معينة. يستخدم التطبيق استعلام LINQ لإرجاع الأسطر من الملف التي يتطابق مع المعايير المحددة. لاستعلام عن محتويات ملف باستخدام استعلام LINQ, قد يتمكن التطبيق من تحميل محتويات ملف في صفيف أو مجموعة. ومع ذلك، تحميل كل ملف في صفيف أو مجموعة قد يستهلك ذاكرة أكبر من المطلوب. بدلاً من ذلك قد يستعلم استعلام LINQ محتويات الملف باستخدام فئة معدوده ، بإرجاع القيم التي تطابق خصائص بحث. الاستعلامات التي تقوم بإرجاع عدد قليل فقط من قيم متطابقة قد تستهلك ذاكرة أقل يكثير.

يمكنك إنشاء فئة التي تطبق واجهة IEnumerable<T> لتعريض بيانات المصدر كبيانات معدوده. الـفئة التي تطبّق واجهة IEnumerable(T) سوف تتطلب فئة أخرى التي تطبق واجهة IEnumerator<T> لتكرر خلال بيانات المصدر. تتيح لك هاتين الفئتين بإرجاع عناصر من البيانات بشكل تسلسلي كنوع محدد.

في هذه المعاينة يتم إنشاء فئة التي تطبق واجهة IEnumerable(Of String) و فئة التي تطبق واجهة IEnumerator(Of String) لقراءة ملف نص خط واحد في مرة الواحدة.

ملاحظة

قد يعرض جهاز الكمبيوتر الخاص بك أسماء أو مواقع مختلفة لبعض عناصر واجهة مستخدم Visual Studio في الإرشادات التالية. يحدد كل من إصدار Visual Studio لديك والإعدادات المستخدمة هذه العناصر. لمزيد من المعلومات، راجع العمل مع إعدادات.

إنشاء فئة معدوده

لإنشاء مشروع مكتبة الفئات المعدوده

  1. في Visual Basic بالقائمة ملف أشر إلى جديد ثم انقر مشروع.

  2. في مربع حوارمشروع جديد في قائمة أنواع المشروع تأكد من أن Windows محدد. اختر مكتبة الفئات في قائمة قوالب . في المربع اسم، اكتب StreamReaderEnumerable، ثم انقر فوق موافق. الـمشروع الجديد. معروض

  3. في مستكشف الحلول ، انقر بزر الماوس الأيمن فوق ملف Class1.vb ثم قم بالنقر إعادة التسمية . إعادة تسمية الملف إلى StreamReaderEnumerable.vb ثم ضغط مفتاح الإدخال Enter. إعادة تسمية الملف سيؤدي أيضاً إعادة تسمية فئة إلى StreamReaderEnumerable. هذه الفئة ستقوم بتطبيق واجهة IEnumerable(Of String) .

  4. ينقر على اليمين المشروع StreamReaderEnumerable, ثم أشر إلى إضافةله ثم انقر فوق العنصر الجديد . حددفئة القالب. في المربع اسم، اكتب StreamReaderEnumerator.vb، ثم انقر فوق موافق.

الفئة الأولى في هذا المشروع هي فئة معدوده و سيتم تنفيذ IEnumerable(Of String) الواجهة. تنفذ هذه الواجهة العامة IEnumerable الواجهة و تضمن أن مستخدمي هذه الفئة القيم المكتوبة كـ String.

لإضافة تعليمة برمجية لتنفيذ IEnumerable

  1. فتح ملف StreamReaderEnumerable.vb.

  2. في السطر بعد Public Class StreamReaderEnumerable ,اكتب التالي، ثم اضغط مفتاح الإدخال.

    Implements IEnumerable(Of String)
    

    Visual Basic ينشر تلقائياً الفئة مع الأعضاء المطلوبة من قِبل IEnumerable(Of String) الواجهة.

  3. هذه الفئة المعدودة ستقرأ أسطر من ملف نصي خط واحد في المرة الواحدة. قم بإضافة التعليمات البرمجية التالية إلى الفئة لعرض الدالة الإنشائية العامة التي تأخذ مسار ملف كـ معلمة إدخال.

    Private _filePath As String
    
    Public Sub New(ByVal filePath As String)
        _filePath = filePath
    End Sub
    
  4. تطبيق أسلوب GetEnumerator واجهة IEnumerable(Of String) سيرجع مثيل جديد StreamReaderEnumerator الفئة. تطبيق GetEnumerator الأسلوب IEnumerable الواجهة يمكن جعله Private, لأنه يمكن عرض الأعضاء فقط لـ IEnumerable(Of String) الواجهة. قم بـاستبدال التعليمات البرمجية Visual Basic التي تم انشاؤها بواسطة GetEnumerator الأساليب مع التعليمات البرمجية التالية.

    Public Function GetEnumerator() As IEnumerator(Of String) _
        Implements IEnumerable(Of String).GetEnumerator
    
        Return New StreamReaderEnumerator(_filePath)
    End Function
    
    Private Function GetEnumerator1() As IEnumerator _
        Implements IEnumerable.GetEnumerator
    
        Return Me.GetEnumerator()
    End Function
    

لإضافة تعليمة برمجية لتنفيذ IEnumerator

  1. فتح ملف StreamReaderEnumerator.vb.

  2. في السطر بعد Public Class StreamReaderEnumerator ,اكتب التالي، ثم اضغط مفتاح الإدخال.

    Implements IEnumerator(Of String)
    

    Visual Basic ينشر تلقائياً الفئة مع الأعضاء المطلوبة من قِبل IEnumerator(Of String) الواجهة.

  3. تـفتح فئة العداد ملف نصي و تنفذ إدخال/إخراج الملف لقراءة الأسطر من الملف. قم بإضافة التعليمات البرمجية التالية إلى الفئة لعرض دالة إنشائية عامة التي تأخذ مسار ملف كمعلمة إدخال و فتح ملف نصي لقراءته.

    Private _sr As IO.StreamReader
    
    Public Sub New(ByVal filePath As String)
        _sr = New IO.StreamReader(filePath)
    End Sub
    
  4. Current الخصائص لكل IEnumerator(Of String) و IEnumerator الواجهات ترجع العنصر الحالي من الملف النصي كـ String. تطبيق Current الخاصية IEnumerator الواجهة يمكن جعله Private, لأنه يمكن عرض الأعضاء فقط لـ IEnumerator(Of String) الواجهة. قم بـاستبدال التعليمات البرمجية Visual Basic التي تم انشاؤها بواسطة Current الخصائص مع التعليمات البرمجية التالية.

    Private _current As String
    
    Public ReadOnly Property Current() As String _
        Implements IEnumerator(Of String).Current
    
        Get
            If _sr Is Nothing OrElse _current Is Nothing Then
                Throw New InvalidOperationException()
            End If
    
            Return _current
        End Get
    End Property
    
    Private ReadOnly Property Current1() As Object _
        Implements IEnumerator.Current
    
        Get
            Return Me.Current
        End Get
    End Property
    
  5. أسلوب MoveNext لواجهة IEnumerator تنتقل إلى العنصر التالي في الملف النصي و يحدث القيمة التي تم إرجاعها بواسطة Current الخاصية. إذا لم يكن هناك المزيد من العناصر للقراءة MoveNext الأسلوب يقوم بارجاع False؛ وإلا MoveNext الأسلوب يرجع True. قم بإضافة التعليمات البرمجية التالية للأسلوب MoveNext .

    Public Function MoveNext() As Boolean _
        Implements System.Collections.IEnumerator.MoveNext
    
        _current = _sr.ReadLine()
        If _current Is Nothing Then Return False
        Return True
    End Function
    
  6. أسلوب Reset لواجهة IEnumerator يوجه المكرر للإشارة إلى بداية الملف النصي ومسح قيمة عنصر الحالي. قم بإضافة التعليمات البرمجية التالية للأسلوب Reset .

    Public Sub Reset() _
        Implements System.Collections.IEnumerator.Reset
    
        _sr.DiscardBufferedData()
        _sr.BaseStream.Seek(0, IO.SeekOrigin.Begin)
        _current = Nothing
    End Sub
    
  7. أسلوب Dispose لواجهة IEnumerator يضمن أن كل المصادر الغير مدارة يتم تحريرها قبل إتلاف المكرر. معالج الملف المستخدم من قبل StreamReader الكائن هو مصدر غير مدار كما يجب أن تيم اغلاقة قبل إتلاف مثيل المكرر. قم بـاستبدال التعليمات البرمجية Visual Basic التي تم انشاؤها بواسطة Dispose الأسلوب مع التعليمات البرمجية التالية.

    Private disposedValue As Boolean = False
    
    Protected Overridable Sub Dispose(ByVal disposing As Boolean)
        If Not Me.disposedValue Then
            If disposing Then
                ' Dispose of managed resources.
            End If
            _current = Nothing
            _sr.Close()
            _sr.Dispose()
        End If
    
        Me.disposedValue = True
    End Sub
    
    Public Sub Dispose() Implements IDisposable.Dispose
        Dispose(True)
        GC.SuppressFinalize(Me)
    End Sub
    
    Protected Overrides Sub Finalize()
        Dispose(False)
    End Sub
    

استخدام نموذج المكرر

يمكنك استخدام فئة العدودة في تعليمات برمجية مع عنصر تحكم بنيات التي تتطلب كائن الذي IEnumerable، مثل For Next التكرار الحلقي أو استعلام LINQ. يظهر المثال التالي StreamReaderEnumerable في استعلام LINQ.

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

Dim results = adminRequests.ToList()

راجع أيضًا:

المرجع

عبارة Visual Basic) For Each...Next)

المبادئ

مقدمة حول LINQ في Visual Basic

بنيات التكرار الحلقي

موارد أخرى

عنصر تحكم التدفق في Visual Basic