当前位置:  开发笔记 > 编程语言 > 正文

在foreach内继续

如何解决《在foreach内继续》经验,为你挑选了1个好方法。

在下面的C#代码片段中,
我在while循环中有一个' foreach'循环,我希望在foreach某个条件发生时跳转到' '中的下一个项目.

foreach (string objectName in this.ObjectNames)
{
    // Line to jump to when this.MoveToNextObject is true.
    this.ExecuteSomeCode();
    while (this.boolValue)
    {
        // 'continue' would jump to here.
        this.ExecuteSomeMoreCode();
        if (this.MoveToNextObject())
        {
            // What should go here to jump to next object.
        }
        this.ExecuteEvenMoreCode();
        this.boolValue = this.ResumeWhileLoop();
    }
    this.ExecuteSomeOtherCode();
}

' continue'会跳到' while'循环的开头而不是' foreach'循环.这里有一个关键字,或者我应该使用我不喜欢的goto.



1> Chris Hynes..:

使用break关键字.这将退出while循环并继续在其外执行.由于你之后没有任何东西,它会循环到foreach循环中的下一个项目.

实际上,更仔细地看一下你的例子,你实际上希望能够在不退出的情况下推进for循环.你不能用foreach循环来做这个,但你可以将foreach循环分解为实际自动化的循环.在.NET中,foreach循环实际上呈现为IEnumerable对象(this.ObjectNames对象所在)上的.GetEnumerator()调用.

foreach循环基本上是这样的:

IEnumerator enumerator = this.ObjectNames.GetEnumerator();

while (enumerator.MoveNext())
{
    string objectName = (string)enumerator.Value;

    // your code inside the foreach loop would be here
}

拥有此结构后,可以在while循环中调用enumerator.MoveNext()以前进到下一个元素.所以你的代码将成为:

IEnumerator enumerator = this.ObjectNames.GetEnumerator();

while (enumerator.MoveNext())
{
    while (this.ResumeWhileLoop())
    {
        if (this.MoveToNextObject())
        {
            // advance the loop
            if (!enumerator.MoveNext())
                // if false, there are no more items, so exit
                return;
        }

        // do your stuff
    }
}


虽然我喜欢你的答案,因为它解决了问题而没有增加额外的逻辑; 我不认为这是一个很好的解决方案.在OP的情况下,我不知道如何做到这一点,但是以这样的方式构造代码,首先不需要这种疯狂的逻辑将是最好的解决方案.
推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有