一、C#中yield關(guān)鍵字用于遍歷循環(huán)中,yield語句的兩種形式
yield return用于返回IEnumerable<T>,
yield break用于終止循環(huán)遍歷。
二、yield return的用法
使用yield return獲取集合,并遍歷。
C# 代碼 復(fù)制

class PRogram


{
public static Random r = new Random();

static IEnumerable<int> GetList(int count)
{

for (int i = 0; i < count; i++)
{
yield return r.Next(10);
}
}

static void Main(string[] args)
{
foreach(int item in GetList(5))
Console.WriteLine(item);
Console.ReadKey();
}
}
生成項(xiàng)目,并用反編譯可執(zhí)行文件。查看GetList方法,發(fā)現(xiàn)該方法返回的是一個(gè)GetList類的實(shí)例。原來yield return是"語法糖",其本質(zhì)是生成了一個(gè)GetList的實(shí)例。

那GetList實(shí)例是什么呢?點(diǎn)擊反編譯工具中<GetList>鏈接查看

分析代碼后可以知道
1、原來GetList類實(shí)現(xiàn)了IEnumerable和IEnumerator的泛型、非泛型接口 2、yield return返回的集合之所以能被迭代、遍歷,是因?yàn)镚etList內(nèi)部有迭代器 3、yield return之所以能實(shí)現(xiàn)"按需供給",是因?yàn)镚etList內(nèi)部有一個(gè)_state字段記錄這上次的狀態(tài)
三、yield break的用法
使用yield break可以在獲取集合的時(shí)候,當(dāng)符合某種條件就終止獲取集合。
C# 代碼 復(fù)制

class Program


{
static Random rand = new Random();

static IEnumerable<int> GetList()
{
while (true)

新聞熱點(diǎn)
疑難解答
圖片精選