C# 将墙实例Id设置为参数墙Id

C# 将墙实例Id设置为参数墙Id,c#,revit-api,C#,Revit Api,我想将墙ID放入墙的属性中 代码将生成但不会将墙id放入所有墙的参数墙id中 我试过不做交易也不做交易。我的印象是必须使用它们来执行,但我没有得到正确的结果(或任何结果) public void InsertWallID() { Document doc = this.ActiveUIDocument.Document; FilteredElementCollector collector = new FilteredElementCollector(d

我想将墙ID放入墙的属性中

代码将生成但不会将墙id放入所有墙的参数墙id中

我试过不做交易也不做交易。我的印象是必须使用它们来执行,但我没有得到正确的结果(或任何结果)

public void InsertWallID() {

        Document doc = this.ActiveUIDocument.Document; 

        FilteredElementCollector collector =    new FilteredElementCollector(doc);

        ICollection<Element> WallEls =  collector.OfClass(typeof(FamilyInstance)).OfCategory(BuiltInCategory.OST_Walls).ToElements();


using (Transaction trans = new Transaction(doc, "Change wall parameters values"))
{
    trans.Start();

        int WallIDValue;

    foreach(Element WallEl in WallEls)
        {           
        ElementId WallId = WallEl.Id;
        WallIDValue = WallId.IntegerValue;
        if(WallEl.LookupParameter("WallID")==null)
        {


        Parameter wallparam = WallEl.LookupParameter("WallID") as Parameter;
            wallparam.Set(WallIDValue);
        }
            }
          trans.Commit();
        }
    }
}
Document doc=this.ActiveUIDocument.Document;
FilteredElementCollector=新的FilteredElementCollector(单据);
ICollection Walls=类别(内置类别.OST_Walls).ToElements()的类别(类型(家族立场))的收集器;
使用(交易记录=新交易记录(单据,“更改墙参数值”))
{
trans.Start();
int-WallIDValue;
foreach(墙中的元素墙)
{           
ElementId WallId=WallEl.Id;
WallIDValue=WallId.IntegerValue;
if(waller.LookupParameter(“WallID”)==null)
{
参数wallparam=WallEl.LookupParameter(“WallID”)作为参数;
wallparam.Set(WallIDValue);
}
}
trans.Commit();
}
}
}
}

预期结果: 每个实例的参数中都有自己的id。这样我就可以安排墙和它们的墙ID了

实际结果:
参数WallID仍然为空,因此没有更改。

您应该在调试器中逐步检查代码,并逐行观察发生的情况。然后您将看到出现了什么问题:过滤元素收集器找不到任何墙

在编写任何东西之前,您应该使用和其他数据库探索工具来确保您正在寻找正确的东西

如果你窥探一堵墙,你会发现它不是一个
FamilyInstance
元素

对于墙,有一个专用的
Wall

如果您只是过滤类(typeof(Wall))的
您将得到它们

另外,调用
ToElements
也是浪费时间和内存空间。只需删除它

我经常在网上讨论这个问题

如果只想迭代过滤元素收集器的结果,则无需使用
ToElements

您可以直接在收集器本身上进行迭代

使用
ToElements
创建信息的副本,并无故使用时间和空间,参见