Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 类列表中的公共可枚举项_.net_Vb.net - Fatal编程技术网

.net 类列表中的公共可枚举项

.net 类列表中的公共可枚举项,.net,vb.net,.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 _Episod

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

班级:

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)

有没有一种方法可以做到这一点,使代码的任何部分都可以调用可枚举项,即访问
剧集(S(i))
剧集(S(i+1))

现在看起来有点乱。每次创建
剧集
对象时,其构造函数(
Sub New
)都会用新列表覆盖共享的
\u剧集
字段,然后从
s
重新填充它(无论是什么)。
\u剧集
列表已经通过名为
剧集
共享
属性进行了全局共享,但直到第一次创建
剧集
对象时,才实际填充该列表。然后,正如我前面所说的,它会被覆盖,并用每个连续的
片段
对象创建重新填充

因此,你的问题的简单答案是,你已经可以在全球范围内访问它,但它可能并没有按照你预期的方式工作。由于它是一个类的共享属性,当您从其他类中使用它时,必须使用类名作为前缀,如下所示:

Episodes.Episodes(S(i))
Module Module1
    Public Property Episodes As List(Of Events)
End Module
如果不想指定类名,可以将列表放在模块中,而不是类中。例如,如果您创建了如下模块:

Episodes.Episodes(S(i))
Module Module1
    Public Property Episodes As List(Of Events)
End Module
然后,您可以在项目中的任何位置使用它,而无需在其前面加上模块名,例如:

Episodes(S(i))
然而,就其本身而言,我并不真正推荐这些,因为我发现您的设计存在三个问题:

  • 每次创建
    剧集
    对象时,您都在重新创建列表
  • 在创建第一个
    对象之前,属性将为
  • 这些事件存储在全局变量中

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

Steven,谢谢你的帮助。所以S是一个事件列表,我试图创建的是一个来自S的成对(片段)列表。如果S是一个事件列表=(a,1),(B,2),(C,3),(D,4);然后一个C集的列表,将是((a,1)(B,2)),((B,2)(C,3)),((C,3)(D,4))。所有这些都基于通过文本框加载的事件。我理解单例的问题,但我似乎无法用我试图重新创建的算法来解决这个问题,因为类片段(和可枚举项)有很多依赖项。基于此,你认为有更好的方法来建造这个吗?我很感谢你的帮助。我相信在某些情况下,全球合作是必要的,但它们之间的距离很远,而且很少。我能想到的唯一一次,你真正需要一个全局的时候,是当你必须只有一个对象作为你与某个单独的硬件或第三方进程或类似的东西的通信接口时。但即便如此,还是有更好的方法将其构建为单例,而不仅仅是将其声明为模块中的全局变量。在使用全局变量的情况下,使用依赖项注入(DI)而不是全局变量无法以更好的方式实现同一件事的情况很少。