You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何遍历包含多个元素的类列表?附ConflictClass类代码

遍历ConflictClass实例列表的正确方法

嘿,首先得提个关键问题:你的ConflictClass里所有字段和属性都用了Shared修饰符——这会导致所有实例共享同一个值,这绝对不是你想要的!每个冲突实例应该有自己独立的员工、客户、服务等信息,所以第一步先把Shared去掉,修正类的定义:

Public Class ConflictClass
    ' 去掉Shared,每个实例拥有自己的私有字段
    Private _emp As String
    Private _cli As String
    Private _serv As String
    Private _tme As String
    Private _dte As String
    Private _dy As String

    Public Sub New(ByVal emp As String, ByVal cli As String, ByVal serv As String, ByVal tme As String, ByVal dte As String, ByVal dy As String)
        ' 这里可以直接在构造函数里Trim,避免重复代码
        _emp = emp.Trim()
        _cli = cli.Trim()
        _serv = serv.Trim()
        _tme = tme.Trim()
        _dte = dte.Trim()
        _dy = dy.Trim()
    End Sub

    ' 所有属性也去掉Shared,变成实例属性
    Public Property Employee As String
        Get
            Return _emp
        End Get
        Set(value As String)
            _emp = value.ToString.Trim()
        End Set
    End Property

    Public Property Client As String
        Get
            Return _cli
        End Get
        Set(value As String)
            _cli = value.ToString.Trim()
        End Set
    End Property

    Public Property Service As String
        Get
            Return _serv
        End Get
        Set(value As String)
            _serv = value.ToString.Trim()
        End Set
    End Property

    Public Property Time As String
        Get
            Return _tme
        End Get
        Set(value As String)
            _tme = value.ToString.Trim()
        End Set
    End Property

    Public Property Date As String
        Get
            Return _dte
        End Get
        Set(value As String)
            _dte = value.ToString.Trim()
        End Set
    End Property

    Public Property Day As String
        Get
            Return _dy
        End Get
        Set(value As String)
            _dy = value.ToString.Trim()
        End Set
    End Property
End Class

接下来,创建包含多个实例的列表并遍历,有几种常用方式:

方式1:For Each循环(最直观常用)

这是遍历集合的标准方式,直接逐个访问每个实例:

' 先构建实例列表
Dim conflictList As New List(Of ConflictClass)()
conflictList.Add(New ConflictClass("John Doe", "ABC Corp", "IT Support", "09:00", "2024-05-21", "Tuesday"))
conflictList.Add(New ConflictClass("Jane Smith", "XYZ Inc", "Consulting", "14:00", "2024-05-21", "Tuesday"))
conflictList.Add(New ConflictClass("Bob Brown", "LMN Ltd", "Audit", "10:30", "2024-05-22", "Wednesday"))

' 遍历列表,处理每个实例
For Each conflict In conflictList
    Console.WriteLine($"员工: {conflict.Employee} | 客户: {conflict.Client} | 服务: {conflict.Service} | 时间: {conflict.Time}")
    ' 在这里可以添加你需要的业务逻辑,比如检查冲突、导出数据等
Next

方式2:For循环(通过索引访问)

如果你需要知道当前实例的索引位置,可以用这种方式:

For i As Integer = 0 To conflictList.Count - 1
    Dim currentConflict = conflictList(i)
    Console.WriteLine($"第{i+1}条记录: {currentConflict.Employee} - {currentConflict.Date}")
Next

方式3:LINQ遍历(适合筛选/转换场景)

如果需要对列表进行筛选、排序或转换,可以结合LINQ来遍历:

' 筛选出周二的冲突记录
Dim tuesdayConflicts = From c In conflictList Where c.Day = "Tuesday" Select c

For Each conflict In tuesdayConflicts
    Console.WriteLine($"周二冲突: {conflict.Employee} 于 {conflict.Time} 为 {conflict.Client} 提供服务")
Next

最后再强调一遍:一定要去掉Shared,因为Shared成员属于类本身,不是单个实例——如果保留Shared,你修改任何一个实例的Employee属性,所有实例的Employee都会变成同一个值,完全失去了创建多个实例的意义。

内容的提问来源于stack exchange,提问作者David Wilson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:04:18