解析在內(nèi)部循環(huán)中Continue外部循環(huán)的使用詳解
有時(shí)候你希望在一個(gè)嵌套循環(huán)的外層循環(huán)中執(zhí)行Continue操作。例如,假設(shè)你有一連串的標(biāo)準(zhǔn),和一堆items。
并且你希望找到一個(gè)符合每個(gè)標(biāo)準(zhǔn)的item。
match = null;
foreach(var item in items)
{
foreach(var criterion in criteria)
{
if (!criterion.IsMetBy(item)) //如果不符合標(biāo)準(zhǔn)
{
//那么說(shuō)明這個(gè)item肯定不是要查找的,那么應(yīng)該在外層循環(huán)執(zhí)行continue操作
}
}
match = item;
break;
}
有很多方法可以實(shí)現(xiàn)這個(gè)需求,這里有一些:
方法#1(丑陋的goto):使用goto語(yǔ)句。
match = null;
foreach(var item in items)
{
foreach(var criterion in criteria)
{
if (!criterion.IsMetBy(item))
{
goto OUTERCONTINUE;
}
}
match = item;
break;
OUTERCONTINUE:
}
如果不符合其中的一個(gè)標(biāo)準(zhǔn),那么goto OUTCONTINUE:,接著檢查下一個(gè)item。
方法#2(優(yōu)雅,漂亮):
當(dāng)你看到一個(gè)嵌套循環(huán),基本上你總是可以考慮將內(nèi)部的循環(huán)放到一個(gè)它自己的方法中:
match = null;
foreach(var item in items)
{
if (MeetsAllCriteria(item, critiera))
{
match = item;
break;
}
}
MeetsAllCriteria方法的內(nèi)部很明顯應(yīng)該是
foreach(var criterion in criteria)
if (!criterion.IsMetBy(item))
return false;
return true;
方法#3,使用標(biāo)志位:
match = null;
foreach(var item in items)
{
foreach(var criterion in criteria)
{
HasMatch=true;
if (!criterion.IsMetBy(item))
{
// No point in checking anything further; this is not
// a match. We want to “continue” the outer loop. How?
HasMatch=false;
break;
}
}
if(HasMatch) {
match = item;
break;
}
}
方法#4,使用Linq。
var matches = from item in items
where criteria.All(
criterion=>criterion.IsMetBy(item))
select item;
match = matches.FirstOrDefault();
對(duì)于在items中的每個(gè)item,都檢查是否滿足所有的標(biāo)準(zhǔn)。
相關(guān)文章
C#實(shí)現(xiàn)IP代理池調(diào)度的示例代碼
這篇文章主要為大家介紹了C#實(shí)現(xiàn)IP代理池調(diào)度的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的參考與學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下2023-07-07C#中的DataSet、string、DataTable、對(duì)象轉(zhuǎn)換成Json的實(shí)現(xiàn)代碼
這篇文章主要介紹了C#中的DataSet、string、DataTable、對(duì)象轉(zhuǎn)換成Json的實(shí)現(xiàn)代碼,需要的朋友可以參考下2014-09-09C#、ASP.NET通用擴(kuò)展工具類之LogicSugar
這篇文章主要介紹了C#、ASP.NET通用擴(kuò)展工具類之LogicSugar,本文直接給出實(shí)現(xiàn)代碼和使用方法示例,需要的朋友可以參考下2015-06-06使用Http Head方法獲取文件長(zhǎng)度的實(shí)現(xiàn)方法詳解
本篇文章是對(duì)使用Http Head方法獲取文件長(zhǎng)度的實(shí)現(xiàn)方法進(jìn)行詳細(xì)的分析介紹,需要的朋友參考下2013-05-05C#實(shí)現(xiàn)獲取Excel中圖片所在坐標(biāo)位置
本文以C#和vb.net代碼示例展示如何來(lái)獲取Excel工作表中圖片的坐標(biāo)位置,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-04-04Datagridview使用技巧(9)Datagridview的右鍵菜單
這篇文章主要為大家詳細(xì)介紹了Datagridview使用技巧,Datagridview的右鍵菜單,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05淺析WPF中Binding的數(shù)據(jù)校驗(yàn)和類型轉(zhuǎn)換
在WPF開發(fā)中,Binding實(shí)現(xiàn)了數(shù)據(jù)在Source和Target之間的傳遞和流通,那在WPF開發(fā)中,如何實(shí)現(xiàn)數(shù)據(jù)的校驗(yàn)和類型轉(zhuǎn)換呢,下面就跟隨小編一起學(xué)習(xí)一下吧2024-03-03