无法从列表(列表)访问数据

时间:2019-07-11 14:03:34

标签: vb.net list revit-api

我正在使用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的列表,其中包含23条4条曲线列表。

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

有人会知道为什么在尝试访问每个子列表的计数时我没有得到期望的23 4s吗?

1 个答案:

答案 0 :(得分:1)

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

将其添加到ClosedCurveList时,您没有添加副本。您正在将引用添加到对象CLosedCurve。因此,当您清除ClosedCurve时,也会清除在ClosedCurveList中添加的内容,因为它们是对同一对象的引用。通过将新的List(Of Curve)分配给ClosedCurve,您将像原来期望的那样拥有单独的引用。