这里,Space是一个以(xposition, yposition, zposition, length, depth, height)为元素的类,有一个space类型的列表。

我需要检查列表中的 with 是否遵循 if 条件中的某些条件。

如果满足,那么我将两个空间合并为一个空间。之后,我删除了我使用过的两个空间。它实际上意味着将两个空间合并为一个空间。

新列表已创建。我再次将其视为新列表并执行相同的过程,直到它不满足条件为止。

我的问题是,它进入了无限循环。我想解决这个问题。

public class MergeSpace 
{ 
    public List<Space> Mergespace(List<Space> Listofspaces) 
    { 
        foreach (Space space1 in Listofspaces) 
        { 
            foreach (Space space2 in Listofspaces) 
            { 
                //int count = 0; 
                if ((space1.sheight == space2.sheight) 
                    && (space1.sdepth == space2.sdepth) 
                    && (space2.xposition == space1.xposition + space1.slength) 
                    && (space2.yposition == space1.yposition) 
                    && (space2.zposition == space1.zposition) 
                    && (space1.semptyspace == true) 
                    && (space2.semptyspace == true)) 
                { 
                    Space space = new Space(); 
                    space.xposition = space1.xposition; 
                    space.yposition = space1.yposition; 
                    space.zposition = space1.zposition; 
                    space1.slength = space1.slength + space2.slength; 
                    space.sheight = space1.sheight; 
                    space.sdepth = space1.sdepth; 
                    space.semptyspace = true; 
                    Listofspaces.Add(space); 
                    Listofspaces.Remove(space1); 
                    Listofspaces.Remove(space2); 
                    Mergespace(Listofspaces); 
                } 

请您参考如下方法:

public class MergeSpace 
        { 
            public List<Space> Mergespace(List<Space> Listofspaces) 
            { 
              List<Space> mergedspacelist = new List<Space>(); 
              int count=0; 
                foreach (Space space1 in Listofspaces) 
                { 
                    foreach (Space space2 in Listofspaces) 
                    { 
                        //int count = 0; 
                        if ((space1.sheight == space2.sheight) 
                            && (space1.sdepth == space2.sdepth) 
                            && (space2.xposition == space1.xposition + space1.slength) 
                            && (space2.yposition == space1.yposition) 
                            && (space2.zposition == space1.zposition) 
                            && (space1.semptyspace == true) 
                            && (space2.semptyspace == true)) 
                        { 
                            Space space = new Space(); 
                           space.xposition = space1.xposition; 
                            space.yposition = space1.yposition; 
                            space.zposition = space1.zposition; 
                            space1.slength = space1.slength + space2.slength; 
                            space.sheight = space1.sheight; 
                            space.sdepth = space1.sdepth; 
                            space.semptyspace = true; 
                            mergedspacelist .Add(space);    
                            count++;                          
 
                        } 
                } 
          } 
          if(count>0) 
         { 
           Mergespace(mergedspacelist ); 
         } 
} 

我不知道你的实际需求是什么,我想这样可以避免无限循环


评论关闭
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!