2012-11-23 28 views
0

它做什麼不同,只是從返回或讓函數完成到最後?注意VB.NET沒有良率中斷,但要求功能用迭代器關鍵字標記。屈服於c#

+0

也看到http://stackoverflow.com/questions/231893/what-does-yield-break-do-in-c –

+0

沒有那些例如說什麼破的產量也不過它並沒有,如果有解釋與簡單返回或讓函數自然退出有什麼不同。 – bradgonesurfing

回答

2

淺談C#,如果你想編寫一個迭代器,如果源爲空或空的時候不返回任何東西。這裏有一個例子:

public IEnumerable<T> EnumerateThroughNull<T>(IEnumerable<T> source) 
{ 
    if (source == null) 
     yield break; 

    foreach (T item in source) 
     yield return item; 
} 

就不可能返回一個空集的迭代器內沒有yield break。它還指定迭代器已結束。您可以將yield break想象爲不返回值的返回語句。

int i = 0; 
while (true) 
{ 
    if (i < 5)  
     yield return i; 
    else    
     yield break; // note that i++ will not be executed after this statement 
    i++; 
}  
+1

yield break在此點枚舉結束,在更復雜的具有複雜內部狀態的列舉中,這可能非常有用。然而,這個用例並不是必需的,因爲這個答案意味着。一個簡單的if(source!= null){foreach .....}將返回一個空的枚舉,而不會產生中斷。 – SAJ14SAJ

+1

答案在編寫我的第一條評論時進行了編輯 - 該評論適用於第一個示例。第二個是更復雜狀態的例子,其中收益率突破有助於提高可讀性。但是,沒有它也是不可能的。例如,將第二個示例的else語句中的yield中斷更改爲簡單中斷,轉義循環以及到函數的自然結尾也會終止枚舉。 – SAJ14SAJ

+1

好的我認爲答案是它不是必需的。讓一個函數自然地完成也是可以的,相當於yield break – bradgonesurfing