2013-02-16 65 views
0

您能否向我解釋'yield'關鍵字在Enumerable方面的工作原理?例如。我不明白如何在下面的程序代碼返回類型的對象的IEnumerable:在C#中解釋yield關鍵字

​​

如果我將鼠標懸停在「.Current」它說,我這‘獲取的元素在枚舉的當前位置’ 。

回答

1

什麼MSDN天:

收率關鍵字信號給編譯器的方法,其中,它 出現是迭代器塊。編譯器生成一個類來實現在迭代器塊中表達的行爲 。在 迭代器塊中,yield關鍵字與返回 關鍵字一起用於爲枚舉器對象提供值。例如,在foreach語句的每個循環中返回值 。的

yield return回報Collection of Object而不是返回從DotNetPerls一個single object

static void Main(string[] args) 
    { 

     int[] numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 

     // supposed u need to find all the numbers which are greater then 5 
     // in general it could have been done like 

     foreach (int number in numbers) 
     { 
      if (number > 5) 
      { 
       Console.WriteLine(number); 
      } 

     } 

     // what if u needed the numbers that are greater then 5 multiple times, each time you would have to start a loop 
     // yield return helps to return a collection of int 
     var needed_numbers = NeededNumbers(numbers); 

     foreach (int neededNumber in needed_numbers) 
     { 
      Console.WriteLine(neededNumber); 
     } 
    } 

    private static IEnumerable<int> NeededNumbers(int[] nums) 
    { 
     foreach (int number in nums) 
     { 
      if (number > 5) 
      { 
       yield return number; 
      } 

     } 
    } 

報價


在簡單的詞

yield return語句在語義上等價於語句返回 語句(它將控制流傳遞給調用方法),接着 通過foreach循環的下一次迭代中的yield語句執行goto。