c# - 如何跳出嵌套的 for 循环

标签 c# loops

Possible Duplicates:
Breaking out of a nested loop
How to break out of 2 loops without a flag variable in C#?

您好,我有一个具有嵌套循环的函数。一旦满足条件,我想打破嵌套循环。代码如下:

foreach (EmpowerTaxView taxView in taxViews)
            {
                foreach (PayrollEmployee payrollEmployee in payrollEmployees)
                {
                    //PayStub payStub = payrollEmployee.InternalPayStub;

                    IReadOnlyList<PayrollWorkLocation> payrollWorkLocations =  payrollEmployee.PayrollWorkLocations;

                    foreach (PayrollWorkLocation payrollWorkLocation in payrollWorkLocations)
                    {
                        Tax tax = GetTaxEntity(payrollWorkLocation, taxView.BSITypeCode, taxView.BSIAuthorityCode,
                                               paidbyEr, resCode);

                        if (tax != null && tax.Rate.HasValue)
                        {
                            taxRate = tax.Rate.Value;
                            break;
                        }
                    }
                }
            }

不幸的是,break 只出现在一个循环中。我想摆脱这一切。拜托,我知道有些人建议使用 goto: 语句。我想知道是否还有其他方法,例如编写一些 LINQ 查询来达到相同的效果。

非常感谢任何想法和建议!

最佳答案

有两个选项表明它们是退出的方式,而无需额外的标志变量来指示“您也应该跳出内部循环”。 (我个人真的不喜欢有这样的变量。

一种选择是将所有这些代码放入一个单独的方法中 - 然后您可以从该方法返回。无论如何,这可能会提高你的代码可读性 - 这真的感觉它已经做了足够的事情来保证提取到一个单独的方法中。

另一个显而易见的选择是使用 LINQ。这是一个我认为可行的示例:

var taxRate = (from taxView in taxViews
               from employee in payrollEmployees
               from location in employee.PayrollWorkLocations
               let tax = GetTaxEntity(location, taxView.BSITypeCode,
                                      taxView.BSIAuthorityCode,
                                      paidbyEr, resCode)
               where tax != null && tax.Rate.HasValue
               select tax.Rate).FirstOrDefault();

对我来说,这看起来比许多 foreach 循环干净得多。

请注意,我没有选择tax.Rate.Value - 只是tax.Rate。这意味着如果未找到匹配的税率,则结果将为“空”decimal?(或任何 tax.Rate 类型),否则为“null”decimal?。所以你会:

if (taxRate != null)
{
    // Use taxRate.Value here
}

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

相关文章:

python - 一行for循环到多行python

c# - 在 C# 中使用 foreach 循环时的内存分配

c# - 在 UWP 中注册进程内后台任务

javascript - 使用倒数计时器自动刷新页面

c# - 名称 configureauth 不存在

javascript - 当变量在单独的循环中定义时,在循环内调用该变量

loops - R Markdown : loop with child. rmd

c# - 在 C# 中,myInt++ 和++myInt 有什么区别?

c# - 将数据列表添加到 View 状态

R:使用 for 循环遍历 data.table 中的变量名称(并按变量对它们进行分组)