如何遍历包含多个元素的类列表?附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
相关产品推荐
相关产品推荐

