تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[مساعدة] تحويل من #C إلى Vb
#4
الهدف من استخدام IEnumerable(Of String) مع الكلاس هو أن نجعل الكلاس يدعم جملة  For Each
أيضا الهدف هنا هو اخفاء الروتين IncrementString

عموما شكل الكلاس يجب أن يكون بالشكل التالي أنا فقط قمت بإعادة ضياغة الكود قليلا
يجب ملاحظة أن الكلاس الأصلي مكتوب بطريقة تجبرك علي استخدام length محدد


PHP كود :
Imports System.Text

Public Class WordGenerator
    Implements IEnumerable
(Of String)

 
   Private _length As Integer
    Private _alphabets 
As List(Of Char)
 
   Private _isValid As Integer

    Public Sub 
New(chars As String)
 
       Me.New(charsCInt(chars.Length 2) - 1)
 
   End Sub

    Public Sub 
New(chars As Stringlength As Integer)
 
       _isValid = If(Not String.IsNullOrEmpty(chars), 10)
 
       _alphabets chars.Distinct().ToList()
 
       _length length
    End Sub

    Private Sub IncrementString
(sb As StringBuilderindex As Integervalues As List(Of Char))
 
       If sb(index) <> values.Last() Then
            sb
(index) = values(values.IndexOf(sb(index)) + 1)
 
           Return
        End 
If
 
       IncrementString(sbindex 1values)
 
       sb(index) = values.First()
 
   End Sub

    Private Iterator 
Function GetEnumeratorInternal() As IEnumerator(Of String)
 
       Dim sb As StringBuilder = New StringBuilder(_length)
 
       For i As Integer 0 To _length 1
            sb
.Append(_alphabets(0))
 
       Next
        While True
            Yield sb
.ToString()
 
           IncrementString(sb_length 1_alphabets)
 
           If sb.ToString().Distinct().Count() = 1 AndAlso sb.ToString().Distinct().Single() = _alphabets.Last() Then
                Yield sb
.ToString()
 
               Return
            End 
If
 
       End While
 
   End Function

 
   Public Function GetEnumerator() As IEnumerator(Of String) Implements IEnumerable(Of String).GetEnumerator
        Return CType
(GetEnumeratorInternal(), IEnumerator(Of String))
 
   End Function

 
   Private Function IEnumerable_GetEnumerator() As IEnumerator Implements IEnumerable.GetEnumerator
        Return CType
(GetEnumeratorInternal(), IEnumerator(Of String))
 
   End Function

End Class 

الكود التالي يوضح كيقية استخدام الكلاس

PHP كود :
      Dim s As String "visual basic"
 
       Dim wg As WordGenerator = New WordGenerator(s)
 
       For Each value As String In wg
            
' إظهار البيانات في ليست بوكس 
            ListBox1.Items.Add(value)
        Next 
Retired
الرد }}}
تم الشكر بواسطة:


الردود في هذا الموضوع
RE: [مساعدة] تحويل من #C إلى Vb - بواسطة silverlight - 19-12-17, 11:24 AM


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم