如何将结果循环添加到列表

时间:2019-05-03 12:07:27

标签: c# list for-loop revit-api

我使用revit代码来收集CurveLoop,并创建放样几何体。

使用Curve循环创建CurveLoops可以正常工作(从点创建线)。但是它创建了两个单独的CurveLoops。

我试图将for循环结果添加到新列表(profile3)中。但是它返回两个列表,其中包含一个CurveLoop。在我的情况下,一个列表(profile3)中应该有两个CurveLoops

CurveLoop profileLoop = new CurveLoop();

List<CurveLoop> profile3 = new List<CurveLoop>();

SolidOptions options = new SolidOptions(ElementId.InvalidElementId,
ElementId.InvalidElementId);

for (int i = 0; i < p.Count - 1; ++i)
{
    // Create lines and convert points to mm
    Line line = Line.CreateBound(p[i] / 304.8, p[i + 1] / 304.8);
    //Append points to CurveLoop
    profileLoop.Append(line);
}

//Here I want to add both created CurveLoops to list
profile3.Add(profileLoop);

//Create Loft
Solid loft = GeometryCreationUtilities.CreateLoftGeometry(profile3
    , options);

无法创建放样,因为它在列表中只有一个Curveloop,并且需要从for循环中创建这两个

应该在一个列表中的第一个CurveLoop和第二个CurveLoop First CurveLoop and Second CurveLoop that should be connected

2 个答案:

答案 0 :(得分:1)

您似乎需要两次将相同的CurveLoop添加到列表中。因此,您最终将获得一个包含两个匹配元素的列表。

我建议再做一次profile3.Add(profileLoop);

您实际上并没有为迭代器创建两个不同的CurveLoops,而只是创建了一个。因此,您需要将其两次添加到列表中才能使结果生效。

答案 1 :(得分:0)

问题

您在这里所做的是将同一对象多次传递到列表中,然后想知道列表中的所有对象为何都一样。

解决方案

您可能想看看passing by reference的概念以及reference types and value types之间的区别。