C 中yield關鍵字解析

2022-01-14 22:04:42 字數 3742 閱讀 8930

前段時間了解到yield關鍵字,一直覺得還不錯。今天給大家分享一下yield關鍵字的用法。yield return 返回集合不是一次性返回所有集合元素,而是一次呼叫返回乙個元素。具體如何使用yield return 返回集合呢?我們一起往下面看吧。

yield return 和yield break:

我們看下平常迴圈返回集合的使用操作(返回1-100中的偶數):

class

program

}static

void main(string

args)

//測試求1到100之間的全部偶數

static

public

void

testmethod()

}//////

使用平常返回集合方法

/// ///

static ienumerablegetallevennumberold()

}return

listnum;} }

然後我們再看看使用yield return返回集合操作:

class

program

}static

void main(string

args)

//測試求1到100之間的全部偶數

static

public

void

testmethod()

} //使用yield return情況下的方法

static ienumerablegetallevennumber()

}yield

break; //

當前集合已經遍歷完畢,我們就跳出當前函式,其實你不加也可以

//這個作用就是提前結束當前函式,就是說這個函式執行完畢了。

} }

上面我們看到了yield return 的使用方法,那麼這個與return返回集合有什麼區別呢?我們看下面乙個案例來進行分析:

我們首先先看通過returun返回集合的乙個案例:

class

program

");}

} //////

平常return 返回集合

通過**的執行結果,我們可以看到這裡返回的結果 yield return 和comment return是分成兩邊的。先執行完乙個然後開始執行另外乙個。不干涉。

我們接著看下使用yield return返回集合:

class

program

");}

}//////

通過yield return 返回集合

我們看這個執行結果,這裡yield return 和comment return 的輸出完全交替了。這裡說明是一次呼叫就返回了乙個元素。

通過上面的案例我們可以發現,yield return 並不是等所有執行完了才一次性返回的。而是呼叫一次就返回一次結果的元素。這也就是按需供給。

0-10

中隨機返回五個數字):

我們通過sharplab

反編譯其**,我們進行檢視發現

yield

具體詳細實現:

我們看到yield內部含有乙個迭代器。這樣去實現的迭代遍歷。同時包含

_state

字段、用來儲存上一次的記錄。

_current

包含當前的值、也通過

_initialthreadid

獲取當前執行緒

id。其中主要的方法是迭代器方法

movenext()

。我們根據反編譯結果來實現乙個與

yiled

相似的類:

///

///解析yield並定義相似類

/// public

sealed

class getrandomnumbersclass : ienumerable, ienumerable, ienumerator, idisposable, ienumerator

}object

ienumerator.current

}[debuggerhidden]

public getrandomnumbersclass(int

state)

[debuggerhidden]

void

idisposable.dispose()

private

bool

movenext()

if (i

return

false

; }

bool

ienumerator.movenext()

[debuggerhidden]

void

ienumerator.reset()

[debuggerhidden]

public ienumeratorgetenumerator()

else

_getrandom.count =_count;

return

_getrandom;

}[debuggerhidden]

ienumerator ienumerable.getenumerator()

[iteratorstatemachine(

typeof

(getrandomnumbersclass))]

private

static ienumerable getlist(int

count)

private

static

void main(string

args)

}

finally

}console.readkey();}}

用愛生活,你會使自己幸福!用愛工作,你會使很多人幸福!c#基礎知識詳解系列

C 中yield關鍵字

yield關鍵字向編譯器指示它所在的方法是迭代器塊。編譯器生成乙個類來實現迭代器塊中標的行為。在迭代器中,yieid關鍵字與return關鍵字結合使用,向列舉器物件提供值。這是乙個返回值,例如,在foreach語句的每一次迴圈中返回的值。yieid關鍵字也可與break結合使用,表示迭代結束。usi...

解析Python中的yield關鍵字

前言 python中有乙個非常有用的語法叫做生成器,所利用到的關鍵字就是yield。有效利用生成器這個工具可以有效地節約系統資源,避免不必要的記憶體占用。一段 def fun for i in range 20 x yield i print good x if name main a fun a....

解析Python中的yield關鍵字

python中有乙個非常有用的語法叫做生成器,所利用到的關鍵字就是yield。有效利用生成器這個工具可以有效地節約系統資源,避免不必要的記憶體占用。def fun for i in range 20 x yield i print good x if name main a fun a.next x...