2013-08-24 2 views
2

VB.Net의 제네릭과 컬렉션에 익숙하지 않습니다. 나는 커스텀 객체의 목록을 만드는 첫 번째 클래스를 작성했다. 작동하는 것처럼 보이지만, 나는 그것을 일종의 방식으로 처리했다고 믿는다. 나는 그것을 호출 할 필요가있는 코드를 개선하는 방법을 알고 싶다.VB.Net List 클래스를 호출자에게보다 융통성있게 만드는 방법

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 

에 대한 개선이 될 것 특정 질문 : 어떻게 코드를 호출을 사용하려면 다음

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 

클래스 사용에 대한 내 첫 번째 작은 테스트입니다 : 여기리스트 클래스의 필수적인 부분입니다 뭔가 같은 :
For Each x In allSubs 
n = x.SubscriberName 
d = x.DaysUntilExpired.ToString() 
Next 

가 allSubs도 .List를 지정할 필요없이 표현 될 수 있도록 클래스를 코딩의 몇 가지 방법이있을 것 - 그것이 같은 것을 표현하는 몇 가지 방법 X 유형 가입자로 인식됩니다.

답변

3

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 
관련 문제