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

我怎么摆脱这个goto?

如何解决《我怎么摆脱这个goto?》经验,为你挑选了1个好方法。

我刚刚开始了一个职位,在工作日结束时,我通过慢慢阅读我们的代码库来等待流量.我偶然发现了这一点,即使在白板上花了相当多的时间,我仍然无法想到一种提取方法goto.有没有办法消除这种跳跃?

public void MyUpdate(MyType foo)
{
    /*Prep code for the loops*/        
    foreach (Thing bar in something)
    {
        foreach (Collection item in bar.Stuff)
        {
            Data dataRX = item.First;
            if (dataRX != null && dataRX.ID.Equals(globalNonsense.ID))
            {
                // Update Data with the latest changes
                dataRX.fooBuddy = foo;
                goto exitLoops;
            }
        }
    }

    exitLoops: ;
}

Yacoub Massa.. 6

由于标签exitLoops位于方法的末尾,因此您只需使用return退出方法,如下所示:

if (dataRX != null && dataRX.ID.Equals(globalNonsense.ID))
{
    // Update Data with the latest changes
    dataRX.fooBuddy = foo;
    return;
}

另一种方法是使用这样的标志:

bool done = false;

foreach (Thing bar in something)
{
    foreach (Collection item in bar.Stuff)
    {
        Data dataRX = item.First;
        if (dataRX != null && dataRX.ID.Equals(globalNonsense.ID))
        {
            // Update Data with the latest changes
            dataRX.fooBuddy = foo;
            done = true;
            break;
        }
    }

    if(done)
        break;
}

即使标签后面有一些代码,您也可以使用第二种方法.



1> Yacoub Massa..:

由于标签exitLoops位于方法的末尾,因此您只需使用return退出方法,如下所示:

if (dataRX != null && dataRX.ID.Equals(globalNonsense.ID))
{
    // Update Data with the latest changes
    dataRX.fooBuddy = foo;
    return;
}

另一种方法是使用这样的标志:

bool done = false;

foreach (Thing bar in something)
{
    foreach (Collection item in bar.Stuff)
    {
        Data dataRX = item.First;
        if (dataRX != null && dataRX.ID.Equals(globalNonsense.ID))
        {
            // Update Data with the latest changes
            dataRX.fooBuddy = foo;
            done = true;
            break;
        }
    }

    if(done)
        break;
}

即使标签后面有一些代码,您也可以使用第二种方法.

推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有