天天看點

【c#】我們為什麼要用 yield return

【c#】我們為什麼要用 yield return

聲明:本文部分内容來自 《more effective c#》,特此聲明

c# 裡面的 yield return 沒什麼高大上的,就是一個一個的 return。但是我們不能小看這種用法,他能給程式設計帶來很多性能上的提高以及用法上的友善(減少周遊次數,增加重用性)。

我們來看一個例子:

對于函數

不難了解,傳進來一個數組,比如說是一個 list,傳回一個去重的 list 出去,簡單明了,事實上,這個函數如果不需要複用的話,沒有任何問題。但是,作為程式員,我們遇到不需要複用的情形實際上是非常少的。

比方說,現在有一個要求,讓你把一個去重的 list 乘方,你會怎麼做,我們可能很自然的想到,把這個 Unique 函數的輸出結果當做輸入傳到另一個乘方函數裡面,然後再周遊一遍即可解決。

可是,這樣的問題是,我們完全可以把去重和乘方放在一次周遊裡面一起解決啊,你這樣多周遊了一次,增加了時間複雜度。

又有同學可能要說,我們直接去改 Unque 函數不就行了嗎,再裡面添加一段乘方邏輯。好,這樣的話我再問你,比方說現在又有一個需求,讓你把一個 list 去重以後開方,你怎麼辦?你是要再寫一個新的函數麼?這樣的話,你這兩個函數裡面都有 list 去重這段邏輯,造成了代碼備援,這是軟體工程的禁忌。

那怎麼辦?yield return 可以完美的解決這個問題,以上面的去重乘方需求為例,我們可以把 Unique 函數改寫為:

接着,我們寫乘方函數,同樣使用 yield return

使用時,我們直接進行函數嵌套即可,我們可以通過一個 for 循環檢視一下結果:

僅周遊一次,複用性良好,yield return 的好處,你現在了解了嗎?