【发布时间】:2021-05-04 21:40:58
【问题描述】:
我正在尝试遍历并打印以下树:
我的预期结果是:
State2
State2/State3
State2/State3/State4
下面是我正在尝试的代码:
public void EA_MenuClick(EA.Repository rep, string location, string menuName, string itemName)
{
EA.Diagram diag;
DiagramElement diagramElementsObj = new DiagramElement();
char[] charsToReplaceFromDiagramId = new char[] { '{', '}' };
diag = rep.GetContextObject();
diagramElementsObj.refDiagramName = diag.Name;
diagramElementsObj.refDiagramId = diag.DiagramGUID.Trim(charsToReplaceFromDiagramId);
diagramElementsObj.states = new List<State>();
diagramElementsObj.transitions = new HashSet<Transition>();
foreach (EA.DiagramObject diagramObj in diag.DiagramObjects)
{
int elementId = diagramObj.ElementID;
EA.Element element = rep.GetElementByID(elementId);
State stateObj = new State();
if (element.MetaType == "State")
{
//stateObj.name = Utilities.FormatElementName(element.Name, rep, element);
FormatElementName(element.Name, rep, element);
stateObj.name = stateName;
diagramElementsObj.states.Add(stateObj);
}
if (element.Methods.Count > 0)
{
GetActionsByState(element, stateObj);
}
GetAllTransitions(rep, diagramElementsObj, element);
}
}
这里的 DiagramElement 是父类,它有一个名为 State 的子列表。 State 有一个名为 Name 的属性。我正在准备上述课程中的对象。不知道下面的递归方法能不能做到。
格式化方法如下:
public void FormatElementName(string result, EA.Repository rep, EA.Element element)
{
if (element.Elements.Count == 0)
{
stateName = result;
return;
}
foreach (EA.Element child in element.Elements)
{
FormatElementName(result + "/" + child.Name, rep, child);
}
}
并以相反的顺序得到以下输出:
State2/State3/State4
State3/State4
State4
我怎样才能颠倒订单?我正在使用 c#。
【问题讨论】:
-
不清楚打印的方式/位置。
-
对于 Enterprise Architect 插件。在对象中分配名称,然后将其转换为 yaml
-
仍然不清楚。如何循环行。你打一个电话。即使
stateName是包含FormatElementName的类的属性,最后它也会有一个值。 -
请参考更新后的帖子
标签: c# .net recursion tree tree-traversal