C#中yield的關鍵字幾乎沒有見過,今天用了一下,感覺很不錯。
他是一個文法糖,直接将集合中滿足條件的資料傳回給調用者,提高性能。
直接上例子:
static void Main(string[] args)
{
string[] strs = new string[] { "3", "5", "7", "9" };
foreach (var item in StrToInt(strs))
{
if (item > 5)
{
Console.WriteLine(item.GetType() + "..." + item);
}
}
Console.ReadKey();
}
static List<int> StrToIntGeneral(string[] str)
{
//處理集合資料一般我們會在外面定義一個集合,然後在循環添加處理過的資料,然後将資料結果傳回
List<int> list = new List<int>();
foreach (var s in str)
{
//這裡需要把數組/集合裡面的數組全部循環完畢再操作
list.Add(Convert.ToInt32(s));
}
return list;
}
static IEnumerable<int> StrToInt(string[] str)
{
foreach (var s in str)
{
yield return Convert.ToInt32(s);
}
//yield return就是将return的結果加到傳回的集合中
//yield 關鍵字,将目前代碼當機,将控制器交給調用者,一旦滿足條件立即傳回結果.
}
兩種寫法比較,可以觀察出執行順序和代碼的書寫。
如果資料量很大,那麼性能就非常的明顯了,找到資料交給被調用者直接傳回結果,不循環所有的資料再傳回.
動手調試一下看看呢.
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIml2ZuUWdn52b09CX0xWdhZWZk9CX09Wbl9lcvRXakVGa49CXy9GdpRWZoh3LcRXZu5ibkN3Yuc2bsJmLjlGdhR3cvw1LcpDc0RHaiojIsJye.gif)