Как сделать VB.Net List более гибким для вызывающего абонента

Я новичок в дженерики и коллекции в VB.Net. Я написал свой первый класс, который создает список пользовательских объектов. Хотя это, кажется, работает, я считаю, что я сделал это грубым способом, и я хотел бы знать, как улучшить его для кода, который должен будет вызывать его. Вот основная часть класса списка:

Public Class Subscribers
    Public List As New List(Of Subscriber)
    Public Sub New()
        Dim sConnDatabase As String = ConfigurationManager.ConnectionStrings("DatabaseConnString").ConnectionString
        Dim connection As New SqlConnection(sConnDatabase)
        Dim cmd As SqlCommand
        cmd = New SqlCommand("SELECT * FROM dbo.Subscriber_v", connection)
        cmd.CommandType = CommandType.Text
        connection.Open()
        Dim objReader As SqlDataReader = cmd.ExecuteReader()
            Do While objReader.Read()
            Dim id As Integer = objReader("SubscriberID")
            Dim s As Subscriber = New Subscriber(id)
            List.Add(s)
        Loop
        objReader.Close()
        connection.Close()
    End Sub
End Class

Вот мой первый маленький тест для использования класса:

Dim n As String
Dim d As Integer

Dim allSubs As New Subscribers()
For Each Subscriber In allSubs.List
    n = Subscriber.SubscriberName
    d = Subscriber.DaysUntilExpired.ToString()
Next

Конкретный вопрос, касающийся улучшения, может быть следующим: как разрешить вызывающей стороне кодировать что-то вроде

For Each x In allSubs
n = x.SubscriberName
d = x.DaysUntilExpired.ToString()
Next

Был бы какой-нибудь способ кодирования класса, такой, что allSubs мог бы быть выражен без необходимости также указывать.List - и некоторый способ выразить его так, чтобы x был распознан как имеющий тип Subscriber.

1 ответ

Решение

Чтобы сделать эту работу нужно иметь Subscribers воплощать в жизнь IEnumerable(Of Subscribers), Реализация может просто переслать List поле

Public Class Subscribers Implements IEnumerable(Of Subscriber)
  Public Function GetEnumerator() As IEnumerator(Of Subscriber) _  
    Implements IEnumerable(Of Subscriber).GetEnumerator

    Return List.GetEnumerator()
  End Function

  Private Function GetEnumerator1() As IEnumerable _
    Implements IEnumerable.GetEnumerator

    Return List.GetEnumerator()
  End Function
End Class
Другие вопросы по тегам