一尘不染

突破嵌套循环

c#

如果我有一个嵌套在另一个循环中的for循环,如何以最快的方式有效地走出两个循环(内部和外部)?

我不想使用布尔值,而不必说转到另一种方法,而只是在外循环之后执行第一行代码。

一种快速而又不错的方法是什么?

我以为异常的代价不菲,应该只在真正异常的情况下抛出异常。因此,从性能的角度来看,这种解决方案不是很好。

我认为利用.NET的新功能(匿名方法)来做一些非常基础的事情是不对的。


阅读 265

收藏
2020-05-19

共1个答案

一尘不染

是的,goto但这很丑陋,而且并非总是可能的。您还可以将循环放入方法(或匿名方法)中,并使用return退出返回主代码。

    // goto
    for (int i = 0; i < 100; i++)
    {
        for (int j = 0; j < 100; j++)
        {
            goto Foo; // yeuck!
        }
    }
Foo:
    Console.WriteLine("Hi");

vs:

// anon-method
Action work = delegate
{
    for (int x = 0; x < 100; x++)
    {
        for (int y = 0; y < 100; y++)
        {
            return; // exits anon-method
        }
    }
};
work(); // execute anon-method
Console.WriteLine("Hi");

请注意,在C#7中,我们应该获得“本地函数”,(语法tbd等)表示它应该类似于:

// local function (declared **inside** another method)
void Work()
{
    for (int x = 0; x < 100; x++)
    {
        for (int y = 0; y < 100; y++)
        {
            return; // exits local function
        }
    }
};
Work(); // execute local function
Console.WriteLine("Hi");
2020-05-19