类列表中的公共可枚举

时间:2014-04-02 12:48:46

标签: .net vb.net

我有一个我需要索引的类列表(基于来自另一个类的元素)。但是,我不确定如何使枚举器可以访问其他类,主窗体和嵌套类。这是我的代码:

班级:

Public Class Episodes
    Inherits Form1

    Public Shared _Episodes As List(Of Events)
    Public Shared Property Episodes() As List(Of Events)
        Get
            Return _Episodes
        End Get
        Set(value As List(Of Events))
            _Episodes = value
        End Set
    End Property

    Public Sub New(ByVal Episodes As List(Of Events))
        _Episodes = New List(Of Events)
        For Each Events As Events In S
            For i As Integer = 0 To S.Count - 2
                _Episodes.Add(S(i))
                _Episodes.Add(S(i + 1))
            Next
        Next
    End Sub

    ' ...
End Class

可枚举:

Public Shared j As Integer = Enumerable.Count(Episodes, Function(Events) Events.EventTime)

有没有办法做到这一点,以便代码的任何部分都可以调用Enumerable,即访问Episodes(S(i))Episodes(S(i+1))

1 个答案:

答案 0 :(得分:0)

现在看起来有点混乱。每次创建Episodes个对象时,它的构造函数(Sub New)会用新列表覆盖共享的_Episodes字段,然后从S重新填充它(无论是什么)。 _Episodes列表已通过名为Shared的{​​{1}}属性进行全局共享,但在第一次创建Episodes对象之前,列表实际上并未填充。然后,正如我之前所说的那样,每次连续创建Episodes对象时,它都会被覆盖并重新填充。

因此,对您的问题的简单回答是,您已经可以全局访问它,但它可能无法按照您打算工作的方式工作。因为它是类的共享属性,所以当你从其他类中使用它时,你必须在它前面添加类名,如下所示:

Episode

如果您不想指定类名,可以将列表放在模块中而不是类中。例如,如果您创建了这样的模块:

Episodes.Episodes(S(i))

然后你可以在项目的任何地方使用它,而不用模块名称作为前缀,例如:

Module Module1
    Public Property Episodes As List(Of Events)
End Module

但是,我不会真的推荐任何这样的,因为我的设计中有三个问题:

  • 每次创建Episodes(S(i)) 对象时,您都在重新创建列表
  • 在创建第一个Episodes对象之前,该属性将为Nothing
  • 剧集存储在全局变量

(网上有很多解释为什么最好避免全球状态和单身人士,所以我不会在这里重复一遍。如果你不知道为什么全局状态不好,我建议做一些研究关于主题)