【问题标题】:How to make VB.Net List class more flexible for the caller如何使调用者的 VB.Net List 类更灵活
【发布时间】:2013-08-24 22:43:55
【问题描述】:

我是 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 识别为订阅者类型。

【问题讨论】:

    标签: vb.net list class generics strong-typing


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2015-03-25
      • 1970-01-01
      • 1970-01-01
      • 2021-08-17
      • 1970-01-01
      • 2014-09-30
      • 2011-04-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多