vb.net - 无法从 List(Of List) 访问数据
问题描述
我正在开发 Revit 插件,并且在该插件中我正在尝试使用List(Of List(Of Curve))
,但是我在访问子列表中的数据时遇到问题。
Dim ClosedCurveList As New List(Of List(Of Curve))
Dim ClosedCurve As new List (Of Curve)
For i=0 To FinalWallLines.Count-1
If FinalWallLines(i+1).GetEndPoint(0).X = FinalWallLines(i).GetEndPoint(1).X And _
FinalWallLines(i+1).GetEndPoint(0).Y = FinalWallLines(i).GetEndPoint(1).Y And _
FinalWallLines(i+1).GetEndPoint(0).Z = FinalWallLines(i).GetEndPoint(1).Z Then
ClosedCurve.Add(FinalWallLines(i))
Else
TaskDialog.Show("A",ClosedCurve.Count)
ClosedCurveList.Add(ClosedCurve)
TaskDialog.Show("B", ClosedCurveList(ClosedCurveList.Count-1).Count)
ClosedCurve.Clear()
End if
Next
TaskDialog.Show("C", ClosedCurveList.Count)
For i=0 To ClosedCurveList.Count-1
TaskDialog.Show(i,ClosedCurveList(i).Count)
next
因此,当我运行该代码时,第一个TaskDialog.Show("A",ClosedCurve.Count)
显示所有ClosedCurve
曲线都由 4 条曲线组成,这是有道理的,因为我的所有曲线都形成了矩形。
正如预期的那样,我的第二个TaskDialog.Show("B", ClosedCurveList(ClosedCurveList.Count-1).Count)
也返回 4 作为每个子列表的计数。
我的第三个TaskDialog.Show("C", ClosedCurveList.Count)
返回 23。
因此,我们可以收集ClosedCurveList
4 条曲线的 23 个列表。
但是,在我的循环期间For i=0 To ClosedCurveList.Count-1
,我的TaskDialog.Show(i,ClosedCurveList(i).Count)
返回 23 0s。
有谁知道为什么我在尝试访问每个子列表的计数时没有按预期获得 23 4s?
解决方案
而不是ClosedCurve.Clear()
你应该有ClosedCurve = new List(Of Curve)
.
当您添加它时,ClosedCurveList
您不会添加副本。您正在添加对 object 的引用CLosedCurve
。因此,当您 clear 时ClosedCurve
,它也会清除添加的那个,ClosedCurveList
因为它们是对同一对象的引用。通过将 new 重新分配List(Of Curve)
给ClosedCurve
,您现在将拥有单独的引用,就像您最初期望的那样。
推荐阅读
- excel - 在 Excel 中计算下订单的频率(最小/最大/平均)
- reactjs - 如何将数据传递到一个页面中
在反应? - informatica-powercenter - 信息技术 | 具有更多目标的会话的性能影响
- html - type='file' 在 angularjs 中不起作用
- c - 如何使二维排列的参数在函数中使用
- sql-server - 如何在 SQL Server 中删除延期日期
- bash - 如何通过 grep 命令正确使用正则表达式组捕获?
- reference - 当旧的枚举被丢弃时,有没有办法从 &mut 枚举中提取值?
- netsuite - 休息项目组自定义价格
- constructor - 未设置可靠性值