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/