首页 > 解决方案 > 无法从 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。

因此,我们可以收集ClosedCurveList4 条曲线的 23 个列表。

但是,在我的循环期间For i=0 To ClosedCurveList.Count-1,我的TaskDialog.Show(i,ClosedCurveList(i).Count)返回 23 0s。

有谁知道为什么我在尝试访问每个子列表的计数时没有按预期获得 23 4s?

标签: vb.netlistrevit-api

解决方案


而不是ClosedCurve.Clear()你应该有ClosedCurve = new List(Of Curve).

当您添加它时,ClosedCurveList您不会添加副本。您正在添加对 object 的引用CLosedCurve。因此,当您 clear 时ClosedCurve,它也会清除添加的那个,ClosedCurveList因为它们是对同一对象的引用。通过将 new 重新分配List(Of Curve)ClosedCurve,您现在将拥有单独的引用,就像您最初期望的那样。


推荐阅读