我有两节课。一个叫做Component,第二个叫做PipeLine。
*Component Class*
string id;
int flow;
List<PipeLine> ConnectedPipeLines;
void ChangeFlow(int flow);
void CalculateFlow();
*PipeLine Class*
int flow;
Component startComponent;
Component endComponent;
void RecalculateFlow();一个组件可以有多个管道,但一个管道只能连接到两个组件。一个在开头,一个在结尾。
管道从startComponent获取流,endComponent从pipeline.Flow获取流。

public Pipeline(Component startComponent, Component endComponent);创建管道后,该管道将添加到开始和结束组件的ConnectedPipelines列表中。
所以ConnectedPipeLines.Add(p);被处死了。
我有一个函数可以更改任何组件的流,我想遍历每个组件并执行component.CalculateFlow(),然后我可以执行pipeline.CalculateFlow()来重新计算管道的流,因为endComponent从管道流中获取它的流。
我就是这样做的,但是如果我调试它,找出当前管道中正在连接的哪两个组件,它只会重新计算第一级(组件A1和AB),而不会重新计算组件A10和组件A11。我哪里错了?
foreach(var pipe in pump.Output.StartComponent.ConnectedPipeLines) {
pipe.EndComponent.CalculateFlow();
foreach(var p in pipe.EndComponent.ConnectedPipeLines) {
p.EndComponent.CalculateFlow();
foreach(var item in p.EndComponent.ConnectedPipeLines) {
item.EndComponent.CalculateFlow()
}
}
}发布于 2017-01-28 01:26:12
您可以向下递归地向下递归。如下所示:
calculateDownstreamFlow(pump.Output.StartComponent.ConnectedPipeLines);
function void calculateDownstreamFlow(List<Pipeline> pipes) {
foreach(var pipe in pipes) {
pipe.EndComponent.CalculateFlow();
calculateDownstreamFlow(pipe.EndComponent.ConnectedPipeLines);
}
}https://stackoverflow.com/questions/41899216
复制相似问题