无法访问列表(列表)中的数据
Cannot access the data from a 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)
也如预期的那样 return 4 作为每个子列表的计数。
我的第三个 TaskDialog.Show("C", ClosedCurveList.Count)
returns 23.
因此,我们可以收集到 ClosedCurveList
是一个包含 4 条曲线的 23 个列表的列表。
但是,在我的循环 For i=0 To ClosedCurveList.Count-1
中,我的 TaskDialog.Show(i,ClosedCurveList(i).Count)
returns 23 0s.
有人知道为什么我在尝试访问每个子列表的计数时没有按预期获得 23 个 4 吗?
你应该 ClosedCurve = new List(Of Curve)
而不是 ClosedCurve.Clear()
。
当您将它添加到 ClosedCurveList
时,您并不是在添加副本。您正在添加对对象 CLosedCurve
的引用。因此,当您清除 ClosedCurve
时,它也会清除在 ClosedCurveList
中添加的那个,因为它们是对同一对象的引用。通过 re-assigning 一个新的 List(Of Curve)
到 ClosedCurve
,您现在将拥有单独的引用,就像您最初期望的那样。
我正在开发 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)
也如预期的那样 return 4 作为每个子列表的计数。
我的第三个 TaskDialog.Show("C", ClosedCurveList.Count)
returns 23.
因此,我们可以收集到 ClosedCurveList
是一个包含 4 条曲线的 23 个列表的列表。
但是,在我的循环 For i=0 To ClosedCurveList.Count-1
中,我的 TaskDialog.Show(i,ClosedCurveList(i).Count)
returns 23 0s.
有人知道为什么我在尝试访问每个子列表的计数时没有按预期获得 23 个 4 吗?
你应该 ClosedCurve = new List(Of Curve)
而不是 ClosedCurve.Clear()
。
当您将它添加到 ClosedCurveList
时,您并不是在添加副本。您正在添加对对象 CLosedCurve
的引用。因此,当您清除 ClosedCurve
时,它也会清除在 ClosedCurveList
中添加的那个,因为它们是对同一对象的引用。通过 re-assigning 一个新的 List(Of Curve)
到 ClosedCurve
,您现在将拥有单独的引用,就像您最初期望的那样。