摘要:C# - yield return
接觸 C# 許久坦白說還真沒使用過 yield return,今天在看 LINQ 的書籍時,看到了其用法。yield return 是在 .Net 2.0 才有的產物,且在方法中傳回實作 IEnumerable 介面的物件集合時, 是使用 yield return 來取代原來的 return 指令。
Code:
using System.Collections;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
List<string> docs1 = new List<string>();
docs1.Add("1");
docs1.Add("2");
docs1.Add("3");
docs1.Add("4");
docs1.Add("5");
foreach (var item in Documents1(docs1))
{
Console.Write(" {0} ", item);
}
Console.Write("\n***********************************\n");
List<string> docs2 = new List<string>();
docs2.Add("1");
docs2.Add("2");
docs2.Add("3");
docs2.Add("4");
docs2.Add("5");
foreach (var item in Documents2(docs1))
{
Console.Write(" {0} ", item);
}
Console.ReadKey();
}
static IEnumerable Documents1(List<string> docs)
{
foreach (var item in docs)
{
if (item != "4")
yield return item;
}
Console.Write(" {0} ", "Holle Danny");
}
static IEnumerable Documents2(List<string> docs)
{
foreach (var item in docs)
{
if (item != "4")
yield return item;
else
yield break;
}
Console.Write(" {0} ", "Holle Danny");
}
}
}
結果:
所以,yield return 跟 return 的區別,return 之後不會再返回到 return 後面的語句繼續執行。
參考:
yield (C# 參考)
使用 yield return 指令傳回匿名型別集合物件
[C# yield return] #2. 另類的應用 - Thread Sync 替代方案
[C#: yield return] #1. How It Work ?