前段時間了解到yield關鍵字,一直覺得還不錯。今天給大家分享一下yield關鍵字的用法。yield return 返回集合不是一次性返回所有集合元素,而是一次呼叫返回乙個元素。具體如何使用yield return 返回集合呢?我們一起往下面看吧。
yield return 和yield break:
我們看下平常迴圈返回集合的使用操作(返回1-100中的偶數):
class然後我們再看看使用yield return返回集合操作:program
}static
void main(string
args)
//測試求1到100之間的全部偶數
static
public
void
testmethod()
}//////
使用平常返回集合方法
/// ///
static ienumerablegetallevennumberold()
}return
listnum;} }
class上面我們看到了yield return 的使用方法,那麼這個與return返回集合有什麼區別呢?我們看下面乙個案例來進行分析:program
}static
void main(string
args)
//測試求1到100之間的全部偶數
static
public
void
testmethod()
} //使用yield return情況下的方法
static ienumerablegetallevennumber()
}yield
break; //
當前集合已經遍歷完畢,我們就跳出當前函式,其實你不加也可以
//這個作用就是提前結束當前函式,就是說這個函式執行完畢了。
} }
我們首先先看通過returun返回集合的乙個案例:
classprogram
");}
} //////
平常return 返回集合
通過**的執行結果,我們可以看到這裡返回的結果 yield return 和comment return是分成兩邊的。先執行完乙個然後開始執行另外乙個。不干涉。
我們接著看下使用yield return返回集合:
classprogram
");}
}//////
通過yield return 返回集合
我們看這個執行結果,這裡yield return 和comment return 的輸出完全交替了。這裡說明是一次呼叫就返回了乙個元素。
通過上面的案例我們可以發現,yield return 並不是等所有執行完了才一次性返回的。而是呼叫一次就返回一次結果的元素。這也就是按需供給。
0-10
中隨機返回五個數字):
我們通過sharplab
反編譯其**,我們進行檢視發現
yield
具體詳細實現:
我們看到yield內部含有乙個迭代器。這樣去實現的迭代遍歷。同時包含
_state
字段、用來儲存上一次的記錄。
_current
包含當前的值、也通過
_initialthreadid
獲取當前執行緒
id。其中主要的方法是迭代器方法
movenext()
。我們根據反編譯結果來實現乙個與
yiled
相似的類:
///用愛生活,你會使自己幸福!用愛工作,你會使很多人幸福!c#基礎知識詳解系列///解析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 中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...