c# - 跳出嵌套循环

标签 c# for-loop nested-loops

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

我不想必须使用 bool 值然后不得不说转到另一个方法,而只是在外循环之后执行第一行代码。

有什么快速又好的方法可以解决这个问题?

我在想异常并不便宜/应该只在真正异常的情况下抛出等等。因此我认为从性能的角度来看这个解决方案不是很好。

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

最佳答案

好吧,goto,但这很丑陋,而且并非总是可行。您还可以将循环放入方法(或匿名方法)中,然后使用 return 返回到主代码。

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

对比:

// 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 中我们应该获得“本地函数”,这(语法待定等)意味着它应该像这样工作:

// 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");

关于c# - 跳出嵌套循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/324831/

相关文章:

c# - 如何向 ListBoxItem 添加上下文菜单?

c# - 解析不同的HttpClient

c# - 有条件的 LINQ ToArray()

javascript - Nightmare.js 错误 : Search failed: Nothing responds to "goto"

javascript - 如何使用 angularJs 创建具有连续数字的多维矩阵

c - C 编程语言中 1 到 100 之间的质数

python - 在Python中循环列表和嵌套列表

python嵌套循环输出艺术和逆转

c# - 将数据从 ModelBinder 传递到自定义 InputFormatter

java - 在不使用 break 的情况下跳出嵌套的 for 循环